NodeJS требуют глобального модуля/пакета
Я пытаюсь установить глобально, а затем использовать forever и forever-monitor такой:
npm install -g forever forever-monitor
Я вижу обычный вывод, а также операции, которые копируют файлы в глобальный путь, но тогда, если я попытаюсь require("forever"); Я получаю сообщение об ошибке сказав, что модуль не найден.
Я использую последнюю версию как node, так и npm, и я уже знаю об изменении, которое npm сделал в global vs local install, но я не хочу установить локально на каждом проекте, и я работаю на платформе, которая не поддерживает link так npm link после глобальной установки для меня невозможно.
мой вопрос: почему я не могу требовать глобально установленного пакета? Это особенность или ошибка? Или я делаю что-то не так?
PS: просто чтобы сделать это кристально ясно: я не хочу устанавливать локально.
7 ответов:
В Узел.js, require не смотрит в папку, где установлены глобальные модули.
вы можете исправить это, установив переменную среды NODE_PATH. В Linux это будет:
export NODE_PATH=/usr/lib/node_modulesПримечание: это зависит от того, где ваши глобальные модули установленной.
посмотреть: загрузка из глобальных папок.
после установки пакета в мире для локальных проектов с глобальной пакет
npm install express -g cd ~/mynodeproject/ npm link expressпосмотреть здесь
извиняюсь за некромантию, но я могу указать жестко закодированные пути к глобально установленным модулям:
var pg = require("/usr/local/lib/node_modules/pg");это не идеально, но учитывая, что Unity3d пытается "скомпилировать" весь javascript, который включен в каталог проекта, Я действительно не могу установить какие-либо пакеты.
Я знаю, что это старый вопрос, но я столкнулся с этим при попытке сделать некоторые проверки версий с помощью
semverнаpreinstallскриптpackage.json. Поскольку я знал, что не могу зависеть от каких-либо установленных локальных модулей, я использовал это для требованияsemverиз глобального
вы можете использовать пакет
requiregрешить эту проблему:var forever = require('requireg')('forever')будет делать трюк.
кроме того, есть еще один модуль,
global-npm, в то время как конкретные только с помощью глобальногоnpm, вы можете посмотреть на короткий код и посмотреть, как техника работает.
по состоянию на документация узел.Яш будет искать в следующих местах по умолчанию:
путь в
NODE_PATHпеременные среды.Примечание:
NODE_PATHпеременная окружения устанавливается в список абсолютных путей, разделенных двоеточием.настоящее .источник
, если данный модуль не может быть найден, это означает, что он не присутствует в одном из вышеуказанных мест.
расположение глобальной корневой папки, в которой установлены модули, можно распечатать с помощью:
npm root -g(по умолчанию путь вычисляется во время выполнения, если это не переопределено вnpmrcфайл).решение
вы можете попробовать следующие способы:
укажите местоположение глобального модуля в
NODE_PATHпеременные среды. Е. Г.echo 'require("forever")' | NODE_PATH="$(npm root -g):$NODE_PATH" nodeдля проверки и печати значения
NODE_PATH, run:echo 'console.log(process.env.NODE_PATH); require("forever")' | NODE_PATH="$(npm root -g):$NODE_PATH" nodeдля более постоянного решения, связать свою
$HOME/.node_modulesглобальная папка пользователя, чтобы указать на корневую папку, выполнив эту команду:ln -vs "$(npm root -g)" "$HOME"/.node_modulesзатем повторно протестируйте его с помощью:.
временное изменение текущей папки, в которой расширение было установлено глобально, перед вызовом сценария. Е. Г.
npm install -g forever cd "$(npm root -g)" echo 'require("forever")' | node cd -настройка глобального места установки в
npmuserconfig file (см.:npm help 5 npmrc) илиuserconfigparam (--prefix).чтобы отобразить текущую конфигурацию, выполните:
npm config list.для редактирования текущей конфигурации, беги:
npm config edit.укажите полный путь расположение узлов модулей при вызове
require(). Е. Г.require("/path/to/sub/module")установите пакет в пользовательское расположение, например
npm install forever -g --prefix "$HOME"/.node_modulesоднако установка пойдет под
~/.node_modules/lib/node_modules/, поэтому местоположение все еще нужно добавить.посмотреть: npm локальный пакет установки на заказ расположение
создать символическую ссылку в текущей папке из расположения глобального пакета. Е. Г.
npm link forever
Вы можете поместить эту строку в файле
.profilefile:export NODE_PATH= "$(npm config get prefix) / lib/node_modules"
это сделает
nodeиспользовать глобальный путь.
Comments