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?

Kosmos
źródło
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?

Aleksiej Iwanow
źródło
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

Jacek
źródło
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ć.

Witalij Terziev
źródło
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.

Andi-lo
źródło
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.
marko
źródło
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.

Sơn Trần-Nguyễn
źródło
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
Kong Kao
źródło
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.

John Galt
źródło
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.

SCBuergel.eth
źródło
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");
Sauliusz
źródło
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ń.

Kiki.J.Hu
źródło
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).

Gregorio
źródło
2

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

Bojan Mitic
źródło
1

Alternatywnie możesz dodać do ~/.npmrcprawego prefiksu . Mam C:\Program Files\nodejs64 Win7.

dmi3y
źródło
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.

wetlip
źródło
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”

Strony internetowe Bizz
źródło
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.

Mahendra
źródło
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

devqon
źródło
-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

Subbu
źródło
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,