Nodejs не может найти установленный модуль в Windows


240

Я изучаю 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?



3
@AmolMKulkarni: не уверен, насколько это актуально здесь. Добавление «.js» к требованию не решает проблему в Windows.
Дан Даскалеску

1
@DanDascalescu: Я думаю, что вы не поняли ответ. Код, приведенный в этом ответе, является кодом Node.js, который показывает, как он выглядит для нужного вам пакета. Таким образом, если вы понимаете, где и как он выглядит для файлов, вы можете решить свою проблему проще.
Amol M Kulkarni


Согласно stackoverflow.com/questions/5817874/… npm установить навсегда -g
Шариф Йаздиан

Ответы:


349

Добавьте переменную среды с именем 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 - это не способ установки глобальных библиотек, это всего лишь способ разместить их по системному пути, чтобы вы могли вызывать их из командной строки, не записывая полный путь к ним. Это полезно, например, тогда, когда приложение узла конвертирует локальные файлы, например, меньше - если вы устанавливаете его глобально, вы можете использовать его в любом каталоге.
  2. Сам узел.js не смотрел на глобальный каталог npm, он использует другой алгоритм для поиска необходимых файлов: http://nodejs.org/api/modules.html#modules_file_modules (в основном, он сканирует каждую папку в пути, начиная из текущей папки для node_modules и проверяет ее).

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


17
Большое спасибо, ссылки, которые вы предоставили, очень полезны, теперь я намного понятнее, хотя алгоритм поиска модулей выглядит немного сложнее. Наконец, я использую переменную среды NODE_PATH для ссылки на глобальный путь к модулю set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules, и она работает, как и ожидалось. Странно, что глобально установленные модули расположены в «% USERPROFILE% \ Application Data \ npm \ node_modules» в Windows, в то же время в NODE_PATH не должно быть кавычек.
Космор

2
Рад помочь. Разве изменение NODE_PATH не нарушило пути к стандартным модулям node.js, таким как FS?
Алексей Иванов

2
Даже мне было интересно, почему у меня C:\Program Files\nodejs\node_modules\npm\node_modulesнет модуля, который я только что установил, используя npm install -g expressи он был доступен вC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske

1
в Windows 8 путь%USERPROFILE%\AppData\Roaming\npm\node_modules
Яр

9
Если вы хотите узнать, где находится ваш глобальный каталог node_modules, выполните команду npm list -g. Первая строка вывода будет родителем глобального каталога node_modules - другими словами, это глобальный каталог node_modules {output}\node_modules. Он также распечатывает каталог установки при запускеnpm install --global {xyz}
cowlinator

34

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


7
это в appdata \ роуминге на Windows 8, а также
JonnyRaa

6
Я нахожусь на Windows 8.1 с npm 2.5.1, и мой NODE_PATH установлен как задокументированный, но он все еще не может найти мои установленные пакеты. Мысли?
JaKXz

5
В Windows 10 это просто должно быть% AppData% \ npm
gkiely

В моем случае (W10) это был% AppData% \ Roaming \ npm
Hinrich

32

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

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

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


4
Кроме того, для пользователей Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Бенсон

4
Спасибо за совет по снятию node_modulesдетали, тоже с этим боролся!
danguilherme

20

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


7
Или, проще говоря, `% AppData% \ npm`
Dan Diplo

Человек это странно, что работал! Я буквально два дня охотился за этим вопросом. Это самое неясное решение, которое я пробовал, и первое, которое сработало. Огромное спасибо.
Будет

да просто добавь в pathокружение variabele, тогда мы сможем запустить его прямо в windows 10
Чжу Сяоху

1
Было бы показано, как на самом деле выполнить это на примере, вместо того, чтобы говорить такие вещи, как «просто добавь к ...»
Гейб Химстра

14

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

В общем, эмпирическое правило таково:

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

...

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

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

10
They’re tiny JavaScript programs.Некоторые из этих библиотек, конечно, не крошечные!
UpTheCreek

1
@UpTheCreek Я уверен, что он имел в виду размер в объеме дискового пространства. Это текстовые файлы. Они объективно маленькие.
Филипп Копли

12

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


4
Кажется, npm link jadeне может работать на Windows, npm возвращает сообщение об ошибке следующим образом:npm ERR! Error: npm link not supported on windows
Cosmore

1
Теперь, как и для версии v0.8.9
Джанфранко П.

@beyonddoor: Вам нужно запустить npm linkиз окна командной строки администратора.
Mrchief

12

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

  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

9

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

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


это единственное, что сработало для меня. работает на Windows 8
Чарли

1
Это единственное, что сработало и для меня, спасибо!
Devqon

6

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

npm install -g gulp

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

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


1
Чтобы прояснить этот момент немного подробнее ... Когда Node установлен как администратор, он обновляет системный путь, чтобы включить ссылку на папку модуля администратора глобального узла. Когда новый пользователь устанавливает что-то глобально, он устанавливает его в другую папку модуля узла. Каждый пользователь, кроме пользователя, который установил Node, должен будет обновить свой путь, чтобы включить в него папку модуля глобального узла. Если вы устанавливаете и используете узел на одной и той же учетной записи, в этом нет необходимости.
dpsthree

Windows 8.1 pro с nodejs v6.9.4 для установки пути запуска: C: \ Program Files \ nodejs \ nodevars.bat
Robot70

4

По моему опыту с win8.1 npm устанавливает модули, C:\Users\[UserName]\AppData\Roaming\npm\node_modules но сам ищет их C:\Users\[UserName]\node_modules.

Один простой справочный модуль решения в приложении по полному пути:

var jsonminify = require("C:/Users/Saulius/AppData/Roaming/npm/node_modules/jsonminify");

4

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


2

У меня была такая же проблема, пытаясь установить беседку с npm install -g bower

Я думаю, это потому, что узел был установлен другим пользователем , а не мной.

Я удалил узел, а затем переустановил его. Во время установки я видел этот текст для опции Add to PATH> npm modules :

Сообщение в узле установки

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

После установки узла я npm install -g bowerснова выполнил . И теперь беседка работает.

Конечно, нет необходимости переустанавливать узел с собственным пользователем, как я. Решение должно быть через переменные NODE_PATH или PATH , как объяснили другие пользователи.

Это только для того, чтобы заметить, что эта проблема возникает, только если узел был установлен другим пользователем (или если во время установки опция Add to PATH> npm modules не была отмечена).



1

В качестве альтернативы вы можете добавить ~/.npmrcправильный префикс . У меня C:\Program Files\nodejsза 64 Win7.


1

Я наткнулся на этот вопрос, потому что я хочу использовать node.js с Visual Studio 2015 на моем новом компьютере с Windows 10. Я использовал node.js на Windows 7 и 8 и 8.1. Никогда не было проблем с node.js при поиске модуля. Я использую устаревший node.js 0.10.39, потому что мне приходится использовать эту версию из-за серийного модуля и модуля RFXCOM.

Ответ для windows 10 - установить NODE_PATH в переменных окружения с помощью C: \ Users \ User \ node_modules.


1
Э, нет (Windows 10 здесь ..) Я вижу некоторые модули в C:\Users\User\node_modules Я вижу некоторые модули в C:\Users\User\AppData\Roaming\npm\node_modules Я вижу некоторые модули в C:\Users\User\node_modules Также расположен в C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Не уверен, как это происходит. Что есть что, и почему они так поступили?
zipzit

1

Для Windows 10 мне пришлось локально установить gulp в папку:

C: \ Users \ MyAccount \ AppData \ Roaming \ НПМ \ node_modules

npm install gulp

Это исправило мою проблему "глоток не распознается"


0

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

Не забудьте перезапустить командную строку или терминал.


0

Все вышеперечисленные ответы не сработали для меня. В конечном итоге единственное, что сработало, - это добавить% AppData% \ npm в переменную Path среды и удалить два файла ng в C: \ Program Files \ nodejs.

Пакеты ng не были установлены в C: \ Program Files \ nodejs \ node_modules, поэтому было очевидно, что использование двоичного файла ng из каталога nodejs не будет работать.

Я не уверен, почему он искал в этом каталоге, потому что я уже настроил - переменная среды PATH - .npmrc в C: \ Users \ MyUser - Попытался добавить системные переменные и / или NODE_PATH


-4

если вы используете windows, нужно выполнить несколько шагов: 1) создать файл с именем package.json

 {
  "name": "hello"
, "version": "0.0.1"
, "dependencies": {
    "express": "*"
  }
}

где hello - это имя пакета, а * означает последнюю версию вашей зависимости

2) код вашего каталога проекта и выполните следующую команду

установка npm

Устанавливает зависимости


4
Это не устанавливает его глобально (который задает вопрос). Это тянет зависимость в приложение
bryanmac

Я перепробовал все перечисленное выше, чтобы убедить мою установку node.js распознать глобально установленные модули, и ни один из них не работает. Даже после удаления и переустановки узла (v8.11.3 LTS), каждый раз, когда я пытаюсь выполнить команду require ("mongodb") в скрипте node.js, я получаю ЖЕ ОШИБКУ: "Не удается найти модуль mongodb". Тем не менее, если я выполню команду "npm ll -g mongodb", NPM сообщит, что модуль установлен. Может кто-нибудь ПОЖАЛУЙСТА поделится со мной информацией, которая РАБОТАЕТ с этой проблемой?
Дэвид Эдвардс

ОБНОВЛЕНИЕ: Saulius выше предоставил обходной путь, который фактически работает, а именно, указав полный путь к модулю в операторе JavaScript require. Но если его заявление о поиске node.js в неправильных папках для установленных модулей верное, может ли кто-нибудь предупредить об этом разработчиков node.js? Потому что проблема по-прежнему затрагивает v8.11.3 LTS.
Дэвид Эдвардс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.