Нужно ли мне устанавливать express в каждый каталог проекта?

#node.js #express

#node.js #express

Вопрос:

У меня CentOS: когда я пытаюсь запустить node.js приложение, которому требуется express, выдает следующую ошибку:

 module.js:340
    throw err;
          ^
Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/var/www/tipsterPro/index.js:2:15)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
  

Я проверил, что express находится в каталоге node_modules:

 root@myServer [/usr/local/lib/node_modules]# ls
./  ../  express/  express-generator/  forever/  n/  npm/  pm2/  supervisor/
  

Я нашел пару сообщений, в которых говорится об установке express в верхнем каталоге node.js проект. Есть ли способ не устанавливать express в каждый мой проект? Должен быть способ указать его в каталог установки.
Дополнительная информация:
Я установил node и express глобально.
Я также установил express-generator с помощью: npm install -g express-generator .

Кстати: модули узла установлены в этом расположении (не уверен, правильно ли): /usr/local/lib/node_modules

В итоге я установил локально, после некоторого чтения о плюсах и минусах локальной и глобальной установки Express, возможно, было бы лучше, если бы я установил express локально. Как только я установил локально, он успешно запустился.

Ответ №1:

Алгоритм поиска модуля узла выглядит следующим образом (из Node.js в действии):

введите описание изображения здесь

Итак, если у вас установлен модуль в node_modules в корневом каталоге вашего проекта, он будет найден в каждом подкаталоге и файле. Как вы можете видеть в последней точке диаграммы, вы можете указать каталог поиска, установив переменную среды NODE_MODULES. При глобальной установке express он может быть расположен где-то вроде /usr/local/bin/express . Вы могли бы установить каталог NODE_MODULES при запуске вашего приложения с помощью

 NODE_MODULES=/usr/local/bin/ node app.js
  

Комментарии:

1. Неплохо. Это ясно объясняет. Спасибо! Эта схема очень полезна и пригодится в будущем.

Ответ №2:

Как вы уже догадались, действительно есть решение вашей проблемы.

Вам необходимо установить express глобально. То есть вместо запуска npm install express вы запускаете:

sudo npm install -g express

  • Sudo необходим для получения доступа на запись в глобальное расположение.
  • Флаг -g обозначает глобальную установку. Вы можете использовать его в любом модуле.

Однако это не панацея, для некоторых проектов могут потребоваться очень специфические версии, поэтому одноразовая установка не является вариантом. Для таких проектов вам все равно придется устанавливать express локально для проекта. Но в вашем случае, я полагаю, достаточно глобальной установки.

Комментарии:

1. Я выполнил «sudo npm install -g express» с пользователем root, но не в каталоге проекта и все еще получаю ту же ошибку.

Ответ №3:

Узел выполняет поиск пакетов вверх по иерархии каталогов.

Абсурдный ответ — делать это

 # cd /
# npm install express
  

Это настроит /node_modules …