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');

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



3
@AmolMKulkarni: не впевнений, наскільки це актуально тут. Додавання ".js" до вимоги не вирішує проблему в Windows.
Дан Даскалеску

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


Відповідно до stackoverflow.com/questions/5817874/… npm install forever -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. Сам node.js не дивився на глобальний dir npm, використовуючи інший алгоритм для пошуку потрібних файлів: http://nodejs.org/api/modules.html#modules_file_modules (в основному це сканування кожної папки на шляху, починаючи від струму для node_модулів папки і перевіряє її).

Дивіться подібне запитання для отримання детальної інформації: Як встановити модуль глобально за допомогою npm?


17
Велике спасибі, надані вами посилання дуже корисні, я зараз набагато зрозуміліший, хоча алгоритм пошуку модулів виглядає дещо складним. Нарешті, я використовую змінну середовища NODE_PATH для посилання на глобальний шлях модуля set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules, і він працює як очікувалося. Дивно, що глобально встановлені модулі розміщені у "% USERPROFILE% \ Дані програми \ 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
Yar

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% \ Роумінг \ npm
Hinrich

32

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

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

Важливо: лише це без node_modulesчастини, мені знадобилося півгодини, щоб це побачити.


4
Крім того, для користувачів Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson

4
Дякую за пораду щодо зняття node_modulesдеталі, також боровся з цим!
danguilherme

20

Для того, щоб він працював у Windows 10, я вирішив це, додавши папку %USERPROFILE%\AppData\Roaming\npmв свій PATH. Після \node_modulesдодається як це: %USERPROFILE%\AppData\Roaming\npm\node_modules\не працює для мене.


7
Або, простіше кажучи, `% AppData% \ npm`
Dan Diplo

Людина дивно, що працювало! Я займався цим питанням два дні, буквально. Це найбільш незрозуміле рішення, яке я спробував, і перше, що працювало. Дуже дякую.
Буде

так, просто додайте до pathзмінної середовища, тоді ми можемо запустити його безпосередньо у Windows 10
Чжу Сяоху

1
Це показало б, як насправді це зробити на прикладі, замість того, щоб сказати такі речі, як "просто додати до ..."
Гейб Хіемстра

14

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

Загалом, правило:

  • Якщо ви встановлюєте те, що ви хочете використовувати у своїй програмі, використовуючи вимагати ("що завгодно"), то встановіть його локально, в корені вашого проекту.
  • Якщо ви встановлюєте щось, що ви хочете використовувати у своїй оболонці, у командному рядку чи щось інше, встановіть це глобально, щоб його бінарні файли опинилися у вашій змінній середовища PATH.

...

Звичайно, є деякі випадки, коли ви хочете зробити і те, і інше. Кава-скрипт та 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 jadeWindows не може працювати, npm повертає повідомлення про помилку так:npm ERR! Error: npm link not supported on windows
Cosmore

1
Зараз це стосується версії v0.8.9
Gianfranco P.

@beyonddoor: потрібно запустити npm linkз вікна команд Адміністратора.
Mrchief

12

Спробував додати / редагувати змінні середовища і дійшов висновку, що:

  1. Відредагувати / додати User variables(у верхньому полі) замістьSystem variables (нижньої частини); інакше вам доведеться "запустити як адміністратор", щоб змусити його працювати.
  2. Append ;%AppData%\npmдля Pathтого , щоб використовувати його в якості інструменту командного рядка (якщо підтримується, як jshintіgrunt-cli ).
  3. Створіть NODE_PATHі встановіть його %AppData%\npm\node_modulesдля того, щоб require('<pkg_name>')у сценаріях, не встановлюючи його в каталог проектів. (Але npm linkпропонується ця вимога, якщо ви працюєте в ОС з mklinkтакими, як Vista та новіші.)

Тестове середовище:

  • Win 7 (Ent., 64-розрядна, SP1), Node.js 4.2.4, npm 2.14.12
  • Win 8.1 (Ent., 64-розрядна), 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

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


2

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

Я думаю, це було тому, що вузол встановив інший користувач , а не я.

Я видалив вузол, а потім перевстановив його. Під час встановлення я побачив цей текст для опції Додати в PATH> npm модулі :

Повідомлення в установці вузла

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

Після установки вузла я npm install -g bowerзнову виконав . А зараз цистерна працює.

Звичайно, не потрібно перевстановлювати вузол із власним користувачем, як я. Рішення повинно бути за допомогою змінних NODE_PATH або PATH , як пояснили інші користувачі.

Це лише зауваження, що ця проблема виникає лише в тому випадку, якщо вузол був встановлений іншим користувачем (або якщо під час установки опція Додати в PATH> npm-модулі не була позначена).




1

Я наткнувся на це питання, тому що я хочу використовувати node.js з візуальною студією 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: \ Користувачі \ мій рахунок \ AppData \ Роумінг \ npm \ node_модулі

npm install gulp

Це виправлено мою проблему "глот не розпізнається"


0

Просто завантажте та встановіть знову вузол із цього, і це виправить усі проблеми шляху.

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


0

Усі вищезазначені відповіді не спрацювали для мене. Єдине, що зрештою спрацювало - це додати% AppData% \ npm до змінної Path середовища, і видалити два нг файли в 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": "*"
  }
}

де привіт - це назва пакету, а * означає останню версію вашої залежності

2) введіть у каталог проекту проект та запустіть наступну команду

npm встановити

Він встановлює залежності


4
Це не встановлюється в усьому світі (про що задається питання). Це втягує залежність у додаток
bryanmac

Я спробував усе, що перераховано вище, щоб спробувати переконати мою установку node.js розпізнати глобально встановлені модулі, і НІКОЛЬ це не працює. Навіть після видалення та перевстановлення вузла (v8.11.3 LTS) щоразу, коли я намагаюся видати команду Requ ("mongodb") у сценарій node.js, я отримую SAME помилку: "Неможливо знайти модуль mongodb". Однак, якщо я видаю команду "npm ll -g mongodb", NPM повідомляє мені, що модуль встановлений. Чи може хтось БУДЬ ВІДПОВІДИТЬ мені певну інформацію, яка працює з цією проблемою?
Девід Едвардс

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