Nodejs не может найти установленный модуль в Windows - PullRequest
225 голосов
/ 06 марта 2012

Сейчас я изучаю nodejs в Windows. Несколько модулей установлены глобально с npm.cmd, и nodejs не удалось найти установленные модули. Возьмите, например, нефрит,

npm install jade -g

Jade установлен в каталоге "C:\Program Files (x86)\nodejs\node_modules", но следующий код завершится с ошибкой "Cannot find module 'jade'",

var jade = require('jade');

Однако код будет успешно выполняться при локальной установке jade (без опции -g в npm). Я не хочу использовать локально установленные модули, для меня это пустая трата дискового пространства. Как я могу заставить глобально установленные модули работать в Windows?

Ответы [ 17 ]

326 голосов
/ 06 марта 2012

Добавьте переменную среды с именем NODE_PATH и задайте для нее значение %USERPROFILE%\Application Data\npm\node_modules (Windows XP), %AppData%\npm\node_modules (Windows 7/8/10) или везде, где npm заканчивает установку модулей в вашем варианте Windows.Чтобы покончить с этим раз и навсегда, добавьте это как системную переменную на вкладке «Дополнительно» диалогового окна «Свойства системы» (запустите control.exe sysdm.cpl,System,3).

Быстрое решение в Windows 7+ состоит в следующем:

rem for future
setx NODE_PATH %AppData%\npm\node_modules
rem for current session
set NODE_PATH=%AppData%\npm\node_modules

Стоит отметить, что NODE_PATH используется только при импорте модулей в приложениях Node.Если вы хотите использовать двоичные файлы глобально установленных модулей в вашем CLI, вам необходимо добавить его также в PATH, но без части node_modules (например, %AppData%\npm в Windows 7/8/10).


Старая история

Я сам новичок в node.js, поэтому могу быть не совсем прав, но по своему опыту это работает так:

  1. -g - это не способ установки глобальных библиотек, это всего лишь способ разместить их по системному пути, чтобы вы могли вызывать их из командной строки, не записывая полный путь к ним.Это полезно, например, тогда, когда приложение узла конвертирует локальные файлы, например less - если вы устанавливаете его глобально, вы можете использовать его в любом каталоге.
  2. node.js сам не сделалпосмотрите на глобальный каталог npm, он использует другой алгоритм для поиска необходимых файлов: http://nodejs.org/api/modules.html#modules_file_modules (в основном, он сканирует каждую папку в пути, начиная с текущей папки node_modules и проверяет ее).

См. Аналогичный вопрос для получения более подробной информации: Как установить модуль глобально с помощью npm?

33 голосов
/ 03 апреля 2013

если вы на платформе Windows7, возможно, вам следует изменить NODE_PATH следующим образом: %AppData%\npm\node_modules

26 голосов
/ 07 апреля 2015

Я знаю, что могу разбудить зомби, но я думаю, что это все еще проблема, если вам нужен глобальный доступ к модулям узлов в Windows 7, вам нужно добавить это в путь к глобальной переменной:

C:\Users\{USER}\AppData\Roaming\npm

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

16 голосов
/ 12 октября 2016

Чтобы заставить его работать на Windows 10, я решил это, добавив папку %USERPROFILE%\AppData\Roaming\npm в мой путь. После добавления \node_modules вот так: %USERPROFILE%\AppData\Roaming\npm\node_modules\ у меня не сработало.

12 голосов
/ 06 марта 2012

Я просто приведу цитату из блога этого узла ...

В общем, правило большого пальца:

  • Есливы устанавливаете что-то, что хотите использовать в своей программе, используя require («что угодно»), затем устанавливаете это локально, в корне вашего проекта.
  • Если вы устанавливаете то, что хотитеиспользуйте в своей оболочке, в командной строке или что-то еще, установите его глобально, чтобы его двоичные файлы попали в переменную среды PATH.

...

Конечно, естьВ некоторых случаях вы хотите сделать оба.Coffee-script и Express являются хорошими примерами приложений, которые имеют интерфейс командной строки, а также библиотеки.В этих случаях вы можете выполнить одно из следующих действий:

  1. Установить его в обоих местах.Серьезно, тебе не хватает места на диске?Это нормально, правда.Это крошечные JavaScript-программы.
  2. Установите его глобально, а затем npm link coffee-script или npm link express (если вы работаете на платформе, поддерживающей символические ссылки.) Тогда вам нужно только обновить глобальнуюскопируйте и обновите все символические ссылки.
10 голосов
/ 05 января 2016

Попытался добавить / отредактировать переменные окружения и прийти к выводу, что:

  1. Редактировать / добавить User variables (из верхнего поля) вместо System variables (из нижней части); в противном случае вам нужно «работать от имени администратора», чтобы заставить его работать.
  2. Добавьте ;%AppData%\npm к Path, чтобы использовать его в качестве инструмента командной строки (если поддерживается, например, jshint и grunt-cli).
  3. Создайте NODE_PATH и установите его %AppData%\npm\node_modules, чтобы require('<pkg_name>') в сценариях без установки в каталоге проекта. (Но npm link предлагается для этого требования, если вы работаете на ОС с mklink, такой как Vista и новее.)

Тестовая среда:

  • Win 7 (Ent., 64-bit, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (Ent., 64-bit), Node.js 0.10.30, npm 1.4.21
10 голосов
/ 06 марта 2012

Чтобы сделать его коротким, используйте npm link jade в каталоге приложения.

6 голосов
/ 23 апреля 2017

У меня было ужасное время заставить работать глобальные модули.В конце концов, я явно добавил C:\Users\yourusername\AppData\Roaming\npm к переменной PATH в разделе Системные переменные.Мне также нужно было, чтобы эта переменная была перед переменной пути nodejs в списке.

Я использую Windows 10.

5 голосов
/ 26 июля 2015

Я столкнулся с этой проблемой в Windows 7, запустив

npm install -g gulp

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

Решение: При выполнении той же установки, что и обычному пользователю (не «запускать как администратор» для cmd) все было в порядке. Я предполагаю, что это связано с установкой и поиском по умолчанию.

3 голосов
/ 08 января 2016

В Windows все говорили, что вы должны установить переменные окружения для модулей nodejs и npm, но знаете ли вы почему?Для некоторых модулей у них есть инструмент командной строки, после установки которого в C: \ Program Files \ nodejs есть файл [module] .cmd , который используется для запуска.в окне команды.Поэтому, если вы не добавите путь, содержащий файл cmd, в переменные окружения % PATH% , вы не сможете успешно запустить их через командное окно.

...