NodeJS требуют глобального модуля/пакета



Я пытаюсь установить глобально, а затем использовать forever и forever-monitor такой:



npm install -g forever forever-monitor



Я вижу обычный вывод, а также операции, которые копируют файлы в глобальный путь, но тогда, если я попытаюсь require("forever"); Я получаю сообщение об ошибке сказав, что модуль не найден.



Я использую последнюю версию как node, так и npm, и я уже знаю об изменении, которое npm сделал в global vs local install, но я не хочу установить локально на каждом проекте, и я работаю на платформе, которая не поддерживает link так npm link после глобальной установки для меня невозможно.



мой вопрос: почему я не могу требовать глобально установленного пакета? Это особенность или ошибка? Или я делаю что-то не так?



PS: просто чтобы сделать это кристально ясно: я не хочу устанавливать локально.

866   7  

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, вы можете посмотреть на короткий код и посмотреть, как техника работает.

по состоянию на документация узел.Яш будет искать в следующих местах по умолчанию:

  1. путь в NODE_PATH переменные среды.

    Примечание: NODE_PATH переменная окружения устанавливается в список абсолютных путей, разделенных двоеточием.

  2. настоящее .источник

, если данный модуль не может быть найден, это означает, что он не присутствует в одном из вышеуказанных мест.

расположение глобальной корневой папки, в которой установлены модули, можно распечатать с помощью: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 -
    
  • настройка глобального места установки в npm userconfig file (см.: npm help 5 npmrc) или userconfig param (--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
    

Вы можете поместить эту строку в файле .profile file:

export NODE_PATH= "$(npm config get prefix) / lib/node_modules"

это сделает node использовать глобальный путь.

Comments

    Ничего не найдено.