Nodejs nie może znaleźć zainstalowanego modułu w systemie Windows


240

W tej chwili uczę się nodejs na Windows. Kilka modułów jest instalowanych globalnie za pomocą npm.cmd, a nodejs nie znalazł zainstalowanych modułów. Weźmy na przykład jadeit,

npm install jade -g

Jade jest zainstalowany w katalogu "C:\Program Files (x86)\nodejs\node_modules", ale poniższy kod zawiedzie z "Cannot find module 'jade'"błędem,

var jade = require('jade');

Jednak kod będzie działał poprawnie, gdy jade jest zainstalowany lokalnie (bez opcji -g w npm). Nie chcę używać modułów zainstalowanych lokalnie, to dla mnie marnowanie miejsca na dysku. Jak sprawić, aby globalnie zainstalowane moduły działały w systemie Windows?



3
@AmolMKulkarni: nie jestem pewien, czy ma to znaczenie tutaj. Dodanie „.js” do wymagania nie rozwiązuje problemu w systemie Windows.
Dan Dascalescu

1
@DanDascalescu: Myślę, że źle zrozumiałeś odpowiedź. Kod podany w tej odpowiedzi to kod Node.js, który pokazuje, jak wygląda pakiet, którego potrzebujesz. Jeśli więc rozumiesz, gdzie i jak wygląda pliki, możesz łatwiej rozwiązać problem.
Amol M. Kulkarni


Według stackoverflow.com/questions/5817874/… npm zainstaluj na zawsze -g
Sharif Yazdian

Odpowiedzi:


349

Dodaj zmienną środowiskową o nazwie NODE_PATHi ustaw ją na %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10) lub wszędzie tam, gdzie npm kończy instalowanie modułów w twoim systemie Windows. Aby to zrobić raz na zawsze, dodaj to jako zmienną systemową na karcie Zaawansowane w oknie dialogowym Właściwości systemu (uruchom control.exe sysdm.cpl,System,3).

Szybkim rozwiązaniem w systemie Windows 7+ jest po prostu uruchomienie:

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

Warto wspomnieć, że NODE_PATHjest używane tylko podczas importowania modułów w aplikacjach Node. Jeśli chcesz używać globalnie zainstalowanych plików binarnych modułów w interfejsie CLI, musisz dodać go również do swojego PATH, ale bez node_modulesczęści (na przykład %AppData%\npmw systemie Windows 7/8/10).


Stara historia

Sam jestem całkiem nowy w node.js, więc nie mogę mieć całkowitej racji, ale z mojego doświadczenia wynika, że ​​działa to w ten sposób:

  1. -g nie jest sposobem instalowania bibliotek globalnych, jest tylko sposobem umieszczenia ich na ścieżce systemowej, dzięki czemu można wywoływać je z wiersza poleceń bez zapisywania pełnej ścieżki do nich. Jest to użyteczne, na przykład, wtedy aplikacja węzła konwertuje pliki lokalne, podobnie jak mniej - jeśli zainstalujesz go globalnie, możesz użyć go w dowolnym katalogu.
  2. node.js sam nie spojrzał na globalny katalog npm, używa innego algorytmu, aby znaleźć wymagane pliki: http://nodejs.org/api/modules.html#modules_file_modules (w zasadzie skanuje każdy folder na ścieżce, zaczynając z bieżącego folderu node_modules i sprawdza go).

Zobacz podobne pytanie, aby uzyskać więcej informacji: Jak zainstalować moduł globalnie za pomocą npm?


17
Dzięki bardzo, podane linki są bardzo pomocne, jestem teraz jaśniejszy, chociaż algorytm wyszukiwania modułów wygląda na nieco skomplikowany. Wreszcie używam zmiennej środowiskowej NODE_PATH, aby odwołać się do globalnej ścieżki modułu set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules, i działa ona zgodnie z oczekiwaniami. Dziwne, że globalnie zainstalowane moduły są umieszczone w '% USERPROFILE% \ Application Data \ npm \ node_modules' w systemie Windows, tymczasem w NODE_PATH nie ma znaków cudzysłowu.
Cosmore,

2
Miło, że mogłem pomóc. Czy zmiana NODE_PATH nie złamała ścieżki do standardowych modułów node.js, takich jak FS?
Aleksiej Iwanow

2
Nawet zastanawiałem się, dlaczego C:\Program Files\nodejs\node_modules\npm\node_modulesnie mam modułu, który właśnie zainstalowałem npm install -g expressi był dostępny wC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske

1
w Windows 8 ścieżka jest%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar

9
Jeśli chcesz dowiedzieć się, gdzie znajduje się twój globalny katalog modułów_węzła, uruchom komendę npm list -g. Pierwszy wiersz danych wyjściowych będzie rodzicem globalnego katalogu modułów_węzła - innymi słowy, globalnym katalogiem modułów_węzła jest {output}\node_modules. Po uruchomieniu drukuje także katalog instalacyjnynpm install --global {xyz}
cowlinator

34

jeśli jesteś na platformie Windows7, może powinieneś zmienić NODE_PATH w następujący sposób: %AppData%\npm\node_modules


7
jest również w appdata \ roaming w Windows 8
JonnyRaa

6
Korzystam z systemu Windows 8.1 z npm 2.5.1 i mam zestaw NODE_PATH zgodnie z dokumentacją, ale nadal nie mogę znaleźć zainstalowanych pakietów. Myśli?
JaKXz

5
W Windows 10 powinien to być po prostu% AppData% \ npm
glyly

W moim przypadku (W10) był to% AppData% \ Roaming \ npm
Hinrich

32

Wiem, że mogę obudzić zombie, ale myślę, że to nadal problem, jeśli potrzebujesz globalnego dostępu do modułów węzłów w systemie Windows 7, musisz dodać to do ścieżki globalnej zmiennej:

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

Ważne: tylko to bez node_modulesczęści zajęło mi pół godziny, aby to zobaczyć.


4
Alternatywnie, dla użytkowników systemu Windows 8% USERPROFILE% \ AppData \ Roaming \ npm
Benson

4
Dzięki za radę w sprawie usunięcia node_modulesczęści, też z tym miałem problem!
danguilherme

20

Aby działało w systemie Windows 10, rozwiązałem go, dodając folder %USERPROFILE%\AppData\Roaming\npmdo mojej ŚCIEŻKI. Po \node_modulesdołączeniu w ten sposób: %USERPROFILE%\AppData\Roaming\npm\node_modules\nie działało dla mnie.


7
Lub prościej: `% AppData% \ npm`
Dan Diplo

Człowieku, to dziwne, że zadziałało! Dosłownie poluję na ten problem. To najbardziej niejasne rozwiązanie, jakie wypróbowałem i pierwsze, które zadziałało. Dziękuję bardzo.
Czy

tak, po prostu dodaj do pathzmiennych środowiskowych, a następnie możemy uruchomić go bezpośrednio w
systemie

1
Pokazuje, jak to zrobić na przykładzie, zamiast mówić takie rzeczy, jak „po prostu dodaj do ...”
Gabe Hiemstra,

14

Zacytuję z postu na blogu tego węzła ...

Ogólna zasada jest następująca:

  • Jeśli instalujesz coś, czego chcesz użyć w swoim programie, używając wymaga („cokolwiek”), a następnie zainstaluj go lokalnie, w katalogu głównym projektu.
  • Jeśli instalujesz coś, co chcesz użyć w swojej powłoce, w wierszu poleceń lub coś, zainstaluj to globalnie, aby pliki binarne znalazły się w zmiennej środowiskowej PATH.

...

Oczywiście są pewne przypadki, w których chcesz zrobić jedno i drugie. Zarówno Coffee-script, jak i Express to dobre przykłady aplikacji, które mają interfejs wiersza poleceń, a także bibliotekę. W takich przypadkach możesz wykonać jedną z następujących czynności:

  1. Zainstaluj go w obu miejscach. Poważnie, czy brakuje ci miejsca na dysku? Naprawdę jest w porządku. To małe programy JavaScript.
  2. Zainstaluj go globalnie, a następnie npm link do skryptu kawy lub npm link express (jeśli korzystasz z platformy obsługującej łącza symboliczne). Następnie wystarczy zaktualizować kopię globalną, aby zaktualizować również wszystkie dowiązania symboliczne.

10
They’re tiny JavaScript programs.Niektóre z tych bibliotek z pewnością nie są małe!
UpTheCreek 21.01.16

1
@UpTheCreek Jestem pewien, że miał na myśli rozmiar w zakresie miejsca na dysku. Są to pliki tekstowe. Są obiektywnie małe.
Phillip Copley

12

Krótko mówiąc, użyj npm link jadew katalogu aplikacji.


4
Wygląda na to, że npm link jadenie działa w systemie Windows, npm zwraca komunikat o błędzie w następujący sposób:npm ERR! Error: npm link not supported on windows
Cosmore

1
Tak jest teraz, podobnie jak w wersji v0.8.9
Gianfranco P.

@beyonddoor: Musisz uruchomić npm linkz okna poleceń administratora.
Mrchief,

12

Próbowałem dodać / edytować zmienne środowiskowe i doszedłem do wniosku, że:

  1. Edytuj / dodaj User variables(w górnym polu) zamiast System variables(w dolnej części); w przeciwnym razie musisz „uruchomić jako administrator”, aby działał.
  2. Dołącz ;%AppData%\npmdo Path, aby użyć go jako narzędzia wiersza poleceń (jeśli jest obsługiwane, takie jak jshinti grunt-cli).
  3. Utwórz NODE_PATHi ustaw go %AppData%\npm\node_modulesw require('<pkg_name>')skryptach bez instalowania go w katalogu projektu. (Ale npm linkjest to zalecane dla tego wymagania, jeśli pracujesz na systemie operacyjnym mklinktakim jak Vista i nowszym).

Środowisko testowe:

  • 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

Ciężko mi było uruchomić globalne moduły. Ostatecznie wyraźnie dodałem C:\Users\yourusername\AppData\Roaming\npmdo zmiennej PATH w Zmienne systemowe. Musiałem także, aby ta zmienna znalazła się przed zmienną ścieżki nodejs na liście.

Korzystam z systemu Windows 10.


to jedyna rzecz, która działała dla mnie. działający na
systemie

1
To jedyna rzecz, która również działała dla mnie, dziękuję!
devqon

6

Natknąłem się na ten problem w systemie Windows 7, z systemem

npm install -g gulp

jako administrator podczas logowania jako zwykły użytkownik.

Rozwiązanie: Podczas wykonywania tej samej instalacji, co zwykły użytkownik (nie „uruchamiaj jako administrator” dla cmd) wszystko było w porządku. Myślę, że jest to związane z domyślną ścieżką instalacji i wyszukiwania.


1
Aby wyjaśnić tę kwestię nieco bardziej ... Gdy Węzeł jest zainstalowany jako administrator, aktualizuje ścieżkę systemową, dodając odniesienie do folderu modułu globalnego węzła administrators. Gdy nowy użytkownik instaluje coś globalnie, instaluje się w innym folderze modułu węzła. Każdy użytkownik inny niż użytkownik, który zainstalował Węzeł, będzie musiał zaktualizować swoją ścieżkę, aby uwzględnić folder modułu węzła globalnego. Jeśli zainstalujesz i użyjesz węzła na tym samym koncie, nie będzie to konieczne.
dpsthree

Windows 8.1 pro z nodejs v6.9.4, aby ustawić ścieżkę uruchamiania: C: \ Program Files \ nodejs \ nodevars.bat
Robot70

4

Z mojego doświadczenia z Win8.1 npm instaluje moduły, C:\Users\[UserName]\AppData\Roaming\npm\node_modules ale po prostu je przeszukuje C:\Users\[UserName]\node_modules.

Jeden prosty moduł referencyjny rozwiązania w aplikacji według pełnej ścieżki:

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

4

W systemie Windows wszyscy mówili, że powinieneś ustawić zmienne środowiskowe dla modułów nodejs i npm, ale wiesz dlaczego? W przypadku niektórych modułów mają one narzędzie wiersza polecenia, po zainstalowaniu modułu jest plik [module] .cmd w C: \ Program Files \ nodejs , i służy do uruchamiania w oknie polecenia. Jeśli więc nie dodasz ścieżki zawierającej plik cmd do zmiennych środowiskowych % PATH% , nie uruchomisz ich pomyślnie w oknie poleceń.


2

Miałem ten sam problem, próbując zainstalować altanę npm install -g bower

Myślę, że było tak, ponieważ węzeł został zainstalowany przez innego użytkownika , a nie mnie.

Odinstalowałem węzeł, a następnie ponownie go zainstalowałem. Podczas instalacji widziałem ten tekst dla opcji Dodaj do ŚCIEŻKI> modułów npm :

Komunikat w instalacji węzła

wprowadź opis zdjęcia tutaj

Po instalacji węzła wykonałem npm install -g bowerponownie. A teraz altana działa.

Na pewno nie jest konieczna ponowna instalacja węzła z własnym użytkownikiem, takim jak ja. Rozwiązanie musi odbywać się za pomocą zmiennych NODE_PATH lub PATH , jak wyjaśnili inni użytkownicy.

Należy tylko zauważyć, że ten problem występuje tylko wtedy, gdy węzeł został zainstalowany przez innego użytkownika (lub jeśli podczas instalacji opcja Dodaj do PATH> moduły npm nie została zaznaczona).


2

Dla mnie pracował na Windows 10 npm config set prefix %AppData%\npm\node_modules



1

Natknąłem się na to pytanie, ponieważ chcę używać node.js w Visual Studio 2015 na nowym komputerze z Windows 10. Użyłem node.js w Windows 7 i 8 i 8.1. Nigdy nie ma problemu, aby node.js znalazł moduł. Korzystam ze starszego węzła.js 0.10.39, ponieważ muszę korzystać z tej wersji ze względu na moduł szeregowy i RFXCOM.

Odpowiedzią dla systemu Windows 10 jest ustawienie parametru NODE_PATH w zmiennych środowiskowych za pomocą C: \ Users \ User \ node_modules.


1
Eee nie. (Windows 10 tutaj ..) Widzę niektóre moduły w C:\Users\User\node_modules Widzę niektóre moduły w C:\Users\User\AppData\Roaming\npm\node_modules Widzę niektóre moduły w C:\Users\User\node_modules Również zlokalizowane w C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Nie wiem, jak to się dzieje. Który jest i dlaczego zrobili to w ten sposób?
zipzit

1

W systemie Windows 10 musiałem lokalnie zainstalować gulp w folderze:

C: \ Users \ myaccount \ AppData \ Roaming \ npm \ node_modules

npm install gulp

To naprawiło mój problem „gulp nie został rozpoznany”


0

Wystarczy pobrać i ponownie zainstalować węzeł z tego miejsca, a to naprawi wszystkie problemy ze ścieżką.

Nie zapomnij ponownie uruchomić wiersza polecenia lub terminala.


0

Wszystkie powyższe odpowiedzi nie działały dla mnie. Jedyną rzeczą, która ostatecznie działała, było dodanie% AppData% \ npm do zmiennej ścieżki środowiskowej ORAZ usunięcie dwóch plików ng w C: \ Program Files \ nodejs.

Pakiety ng nie zostały zainstalowane w C: \ Program Files \ nodejs \ node_modules, więc było oczywiste, że użycie binarnego ng z katalogu nodejs nie zadziała.

Nie jestem pewien, dlaczego wyszukiwał w tym katalogu, ponieważ już skonfigurowałem - zmienną środowiskową PATH - .npmrc w C: \ Users \ MyUser - Próbowałem dodać zmienne systemowe i / lub NODE_PATH


-4

jeśli używasz systemu Windows, zajmie to kilka kroków, 1) utwórz plik o nazwie package.json

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

gdzie hello to nazwa pakietu, a * oznacza najnowszą wersję zależności

2) kod do katalogu projektu i uruchom następującą komendę

instalacja npm

Instaluje zależności


4
To nie instaluje go globalnie (o co pyta pytanie).
Wciąga

Próbowałem wszystkiego, co wymienione powyżej, aby przekonać moją instalację node.js do rozpoznania globalnie zainstalowanych modułów, ale ŻADNA z nich nie działa. Nawet po odinstalowaniu i ponownej instalacji węzła (wersja 8.11.3 LTS) za każdym razem, gdy próbuję wydać komendę wymagającą („mongodb”) w skrypcie node.js, pojawia się błąd SAME: „Nie można znaleźć modułu mongodb”. Jednak jeśli wydam polecenie „npm ll -g mongodb”, NPM powie mi, że moduł jest zainstalowany. Czy ktoś może PROSZĘ podać mi informację, że DZIAŁA z tym problemem?
David Edwards,

AKTUALIZACJA: Saulius powyżej przedstawił obejście, które faktycznie działa, a mianowicie określenie pełnej ścieżki do modułu w instrukcji JavaScript wymagającej. Ale jeśli jego stwierdzenie dotyczące przeszukiwania node.js w niewłaściwych folderach pod kątem zainstalowanych modułów jest prawidłowe, czy ktoś może ostrzec o tym deweloperów node.js? Ponieważ problem nadal występuje w wersji 8.11.3 LTS.
David Edwards,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.