Nodejs kann das installierte Modul unter Windows nicht finden

240

Ich lerne gerade NodeJS unter Windows. Mehrere Module werden global mit npm.cmd installiert, und nodejs konnte die installierten Module nicht finden. Nehmen Sie zum Beispiel Jade,

npm install jade -g

Jade ist im Verzeichnis installiert "C:\Program Files (x86)\nodejs\node_modules", aber der folgende Code schlägt mit einem "Cannot find module 'jade'"Fehler fehl :

var jade = require('jade');

Der Code wird jedoch erfolgreich ausgeführt, wenn Jade lokal installiert ist (ohne die Option -g in npm). Ich möchte keine lokal installierten Module verwenden, es ist eine Verschwendung von Speicherplatz für mich. Wie kann ich dafür sorgen, dass die global installierten Module unter Windows funktionieren?

Cosmore
quelle
3
@AmolMKulkarni: Ich bin mir nicht sicher, wie das hier relevant ist. Das Hinzufügen von '.js' zur Anforderung löst das Problem unter Windows nicht.
Dan Dascalescu
1
@ DanDascalescu: Ich denke, Sie haben die Antwort falsch verstanden. Der in dieser Antwort angegebene Code ist ein Code von Node.js, der zeigt, wie er für das gewünschte Paket aussieht. Wenn Sie also verstehen, wo und wie nach Dateien gesucht wird, können Sie Ihr Problem einfacher lösen.
Amol M Kulkarni
Laut stackoverflow.com/questions/5817874/… npm für immer installieren -g
Sharif Yazdian

Antworten:

349

Variable hinzufügen eine Umgebung genannt NODE_PATHund stellen Sie ihn auf %USERPROFILE%\Application Data\npm\node_modules(Windows XP), %AppData%\npm\node_modules(Windows 7/8/10), oder wo auch immer npm endet die Module auf Ihrem Windows - Geschmack zu installieren. Um dies ein für alle Mal zu tun, fügen Sie dies als Systemvariable auf der Registerkarte Erweitert des Dialogfelds Systemeigenschaften hinzu (ausführen control.exe sysdm.cpl,System,3).

Eine schnelle Lösung in Windows 7+ besteht darin, einfach Folgendes auszuführen:

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

Erwähnenswert ist, dass dies NODE_PATHnur beim Importieren von Modulen in Node-Apps verwendet wird. Wenn Sie die Binärdateien global installierter Module in Ihrer CLI verwenden möchten, müssen Sie diese auch zu Ihrer PATH, jedoch ohne node_modulesTeil hinzufügen (z. B. %AppData%\npmin Windows 7/8/10).


Alte Geschichte

Ich bin selbst ziemlich neu bei node.js, daher kann ich nicht ganz richtig liegen, aber meiner Erfahrung nach funktioniert es folgendermaßen:

  1. -g ist keine Möglichkeit, globale Bibliotheken zu installieren, sondern nur eine Möglichkeit, sie im Systempfad zu platzieren, sodass Sie sie über die Befehlszeile aufrufen können, ohne den vollständigen Pfad zu ihnen zu schreiben. Es ist zum Beispiel nützlich, wenn die Knoten-App lokale Dateien wie weniger konvertiert. Wenn Sie sie global installieren, können Sie sie in jedem Verzeichnis verwenden.
  2. node.js selbst hat sich das globale Verzeichnis npm nicht angesehen, sondern verwendet einen anderen Algorithmus, um die erforderlichen Dateien zu finden: http://nodejs.org/api/modules.html#modules_file_modules (im Grunde wird jeder Ordner im Pfad von Anfang an gescannt aus dem aktuellen Ordner für node_modules und überprüft ihn).

Weitere Informationen finden Sie in einer ähnlichen Frage: Wie installiere ich ein Modul global mit npm?

Alexey Ivanov
quelle
17
Vielen Dank, die von Ihnen angegebenen Links sind sehr hilfreich. Ich bin jetzt viel klarer, obwohl der Modul-Suchalgorithmus etwas kompliziert aussieht. Schließlich verwende ich die Umgebungsvariable NODE_PATH, um auf den globalen Modulpfad zu verweisen set NODE_PATH=C:\Documents and Settings\DevUser\Application Data\npm\node_modules, und es funktioniert wie erwartet. Es ist seltsam, dass global installierte Module unter Windows in '% USERPROFILE% \ Application Data \ npm \ node_modules' positioniert sind. In NODE_PATH dürfen jedoch keine Anführungszeichen stehen.
Cosmore
2
Froh, dass ich Helfen kann. Hat das Ändern von NODE_PATH nicht den Pfad zu Standardmodulen von node.js wie FS unterbrochen?
Alexey Ivanov
2
Sogar ich habe mich gefragt, warum ich C:\Program Files\nodejs\node_modules\npm\node_modulesnicht das Modul habe, mit dem ich gerade installiert habe, npm install -g expressund es war verfügbar inC:\Documents and Settings\swapnil\Application Data\npm\node_modules
Swapnil Mhaske
1
in Windows 8 ist der Pfad%USERPROFILE%\AppData\Roaming\npm\node_modules
Yar
9
Wenn Sie herausfinden möchten, wo sich Ihr globales Verzeichnis node_modules befindet, führen Sie den Befehl aus npm list -g. Die erste Ausgabezeile ist das übergeordnete Element des globalen Verzeichnisses node_modules - mit anderen Worten, das globale Verzeichnis node_modules ist {output}\node_modules. Es druckt auch das Installationsverzeichnis aus, wenn Sienpm install --global {xyz}
Cowlinator
34

Wenn Sie sich auf der Windows7-Plattform befinden, sollten Sie NODE_PATH möglicherweise folgendermaßen ändern: %AppData%\npm\node_modules

Jack
quelle
7
Es ist in AppData \ Roaming unter Windows 8
JonnyRaa
6
Ich bin unter Windows 8.1 mit npm 2.5.1 und habe meinen NODE_PATH wie dokumentiert eingestellt, kann aber meine installierten Pakete immer noch nicht finden. Gedanken?
JaKXz
5
In Windows 10 sollte es nur% AppData% \ npm sein
gkiely
In meinem Fall (W10) war es% AppData% \ Roaming \ npm
Hinrich
32

Ich weiß, dass ich einen Zombie wecken kann, aber ich denke, dass dies immer noch ein Problem ist. Wenn Sie unter Windows 7 globalen Zugriff auf Knotenmodule benötigen, müssen Sie dies Ihrem globalen Variablenpfad hinzufügen:

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

Wichtig: Nur das ohne das node_modulesTeil, ich habe eine halbe Stunde gebraucht, um das zu sehen.

Vitaliy Terziev
quelle
4
Alternativ für Windows 8-Benutzer% USERPROFILE% \ AppData \ Roaming \ npm
Benson
4
Vielen Dank für den Rat zum Entfernen des node_modulesTeils, hatte auch damit zu kämpfen!
Danguilherme
20

Damit es unter Windows 10 funktioniert, habe ich es gelöst, indem ich den Ordner %USERPROFILE%\AppData\Roaming\npmmeinem PATH hinzugefügt habe. So \node_modulesangehängt: %USERPROFILE%\AppData\Roaming\npm\node_modules\hat bei mir nicht funktioniert.

Andi-lo
quelle
7
Oder einfacher:% AppData% \ npm`
Dan Diplo
Mann, es ist komisch, dass es funktioniert hat! Ich habe dieses Problem buchstäblich zwei Tage lang gejagt. Dies ist die dunkelste Lösung, die ich versucht habe, und die erste, die funktioniert hat. Ich danke dir sehr.
Will
Ja, fügen Sie einfach die pathUmgebungsvariable hinzu, dann können wir sie direkt in Windows 10 ausführen
Zhu Xiaohu
1
Es würde zeigen, wie man dies tatsächlich mit einem Beispiel durchführt, anstatt Dinge wie "nur zu ... hinzufügen" zu sagen
Gabe Hiemstra
14

Ich zitiere nur aus dem Blog-Beitrag dieses Knotens ...

Im Allgemeinen lautet die Faustregel:

  • Wenn Sie etwas installieren, das Sie in Ihrem Programm verwenden möchten, verwenden Sie require ('was auch immer'), und installieren Sie es lokal im Stammverzeichnis Ihres Projekts.
  • Wenn Sie etwas installieren, das Sie in Ihrer Shell, in der Befehlszeile oder so verwenden möchten, installieren Sie es global, sodass seine Binärdateien in Ihrer PATH-Umgebungsvariablen landen.

...

Natürlich gibt es einige Fälle, in denen Sie beides tun möchten. Coffee-Script und Express sind gute Beispiele für Apps mit einer Befehlszeilenschnittstelle sowie einer Bibliothek. In diesen Fällen können Sie einen der folgenden Schritte ausführen:

  1. Installieren Sie es an beiden Stellen. Im Ernst, haben Sie so wenig Speicherplatz? Es ist wirklich in Ordnung. Es sind winzige JavaScript-Programme.
  2. Installieren Sie es global und dann npm link Coffee-Script oder npm Link Express (wenn Sie sich auf einer Plattform befinden, die symbolische Links unterstützt). Dann müssen Sie nur die globale Kopie aktualisieren, um auch alle Symlinks zu aktualisieren.
Marko
quelle
10
They’re tiny JavaScript programs.Einige dieser Bibliotheken sind sicherlich nicht winzig!
UpTheCreek
1
@UpTheCreek Ich bin zuversichtlich, dass er sich auf die Größe im Bereich des Speicherplatzes bezog. Sie sind Textdateien. Sie sind objektiv klein.
Phillip Copley
12

Um es kurz zu machen, verwenden Sie es npm link jadein Ihrem App-Verzeichnis.

Sơn Trần-Nguyễn
quelle
4
Es scheint npm link jadenicht unter Windows zu funktionieren, npm gibt eine Fehlermeldung wie folgt zurück:npm ERR! Error: npm link not supported on windows
Cosmore
1
Es funktioniert jetzt, wie für Version v0.8.9
Gianfranco P.
@beyonddoor: Sie müssen über npm linkein Administrator-Befehlsfenster ausgeführt werden.
Mrchief
12

Versucht, Umgebungsvariablen hinzuzufügen / zu bearbeiten und kommt zu dem Schluss, dass:

  1. Bearbeiten / Hinzufügen User variables(des oberen Felds) anstelle vonSystem variables (des unteren Teils); Andernfalls müssen Sie "als Administrator ausführen", damit es funktioniert.
  2. Anhängen ;%AppData%\npman Path, um es als Befehlszeilenprogramm zu verwenden (falls unterstützt, wie jshintund grunt-cli).
  3. Erstellen NODE_PATHund setzen Sie %AppData%\npm\node_moduleses require('<pkg_name>')in Skripten, ohne es im Projektverzeichnis zu installieren. ( Wird jedoch für diese Anforderung npm linkempfohlen , wenn Sie mit einem Betriebssystem mklinkwie Vista oder neuer arbeiten.)

Test Umgebung:

  • 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
quelle
9

Ich hatte eine schreckliche Zeit damit, globale Module zum Laufen zu bringen. Schließlich habe ich ausdrücklich hinzugefügtC:\Users\yourusername\AppData\Roaming\npm die PATH-Variable unter Systemvariablen . Ich musste diese Variable auch vor die Pfadvariable nodejs in der Liste stellen.

Ich verwende Windows 10.

John Galt
quelle
Dies ist das einzige, was für mich funktioniert hat. Laufen auf Windows 8
Charlie Carver
1
Dies ist das einzige, was auch für mich funktioniert hat, danke!
Devqon
6

Ich bin auf dieses Problem unter Windows 7 gestoßen

npm install -g gulp

als Administrator, während Sie als normaler Benutzer angemeldet sind.

Lösung: Bei der Ausführung derselben Installation wie beim normalen Benutzer (nicht "als Administrator ausführen" für cmd) war alles in Ordnung. Ich denke, es hängt mit dem Standardinstallations- und Suchpfad zusammen.

SCBuergel.eth
quelle
1
Um diesen Punkt etwas näher zu erläutern ... Wenn Node als Administrator installiert ist, wird der Systempfad so aktualisiert, dass er einen Verweis auf den globalen Knotenmodulordner des Administrators enthält. Wenn ein neuer Benutzer etwas global installiert, wird es in einem anderen Knotenmodulordner installiert. Jeder andere Benutzer als der Benutzer, der Node installiert hat, muss seinen Pfad aktualisieren, um seinen globalen Knotenmodulordner einzuschließen. Wenn Sie Node auf demselben Konto installieren und verwenden, ist dies nicht erforderlich.
dpsthree
Windows 8.1 Pro mit NodeJS v6.9.4, um den Pfad festzulegen: C: \ Programme \ Nodejs \ Nodevars.bat
Robot70
4

Aus meiner Erfahrung mit win8.1 installiert npm Module auf C:\Users\[UserName]\AppData\Roaming\npm\node_modules , sucht sie aber dumply weiter C:\Users\[UserName]\node_modules.

Ein einfaches Lösungsreferenzmodul in der Anwendung mit vollständigem Pfad:

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

Für Windows sagten alle, Sie sollten Umgebungsvariablen für NodeJS- und Npm-Module festlegen, aber wissen Sie warum? Für einige Module gibt es ein Befehlszeilentool. Nach der Installation des Moduls befindet sich in C: \ Programme \ nodejs die Datei [module] .cmd , die zum Starten im Fensterbefehl verwendet wird. Wenn Sie also den Pfad mit der Cmd-Datei nicht zu den Umgebungsvariablen % PATH% hinzufügen , werden Sie sie nicht erfolgreich über das Befehlsfenster starten.

Kiki.J.Hu
quelle
2

Ich hatte das gleiche Problem beim Versuch, die Laube mit zu installieren npm install -g bower

Ich denke, das lag daran, dass der Knoten von einem anderen Benutzer installiert wurde , nicht von mir.

Ich habe den Knoten deinstalliert und ihn dann neu installiert. Während der Installation wurde dieser Text für die Option Zu PATH hinzufügen> npm-Module angezeigt :

Nachricht in der Knoteninstallation

Geben Sie hier die Bildbeschreibung ein

Nach der Knoteninstallation habe ich npm install -g bowererneut ausgeführt . Und jetzt funktioniert die Laube.

Sicher ist es nicht notwendig, den Knoten mit einem eigenen Benutzer wie mir neu zu installieren. Die Lösung muss über NODE_PATH- oder PATH- Variablen erfolgen, wie andere Benutzer erklärt haben.

Dies ist nur zu beachten, dass dieses Problem nur auftritt, wenn der Knoten von einem anderen Benutzer installiert wurde (oder wenn während der Installation die Option Zu PATH hinzufügen> npm-Module nicht markiert wurde).

Gregorio
quelle
2

Für mich arbeitete unter Windows 10 npm config set prefix %AppData%\npm\node_modules

Bojan Mitic
quelle
1

Alternativ können Sie das ~/.npmrcrichtige Präfix hinzufügen . Ich habe C:\Program Files\nodejsfür 64 Win7.

dmi3y
quelle
1

Ich bin auf diese Frage gestoßen, weil ich node.js mit Visual Studio 2015 auf meinem neuen Computer mit Windows 10 verwenden möchte. Ich habe node.js unter Windows 7 und 8 und 8.1 verwendet. Nie ein Problem node.js beim Finden eines Moduls. Ich verwende einen Legacy-Knoten.js 0.10.39, da ich diese Version aufgrund des seriellen und RFXCOM-Moduls verwenden muss.

Die Antwort für Windows 10 besteht darin, NODE_PATH in den Umgebungsvariablen mit C: \ Users \ User \ node_modules festzulegen.

Wetlip
quelle
1
Äh, nein. (Windows 10 hier ..) Ich sehe einige Module unter C:\Users\User\node_modules Ich sehe einige Module unter C:\Users\User\AppData\Roaming\npm\node_modules Ich sehe einige Module unter C:\Users\User\node_modules Auch unter C:\Program Files (x86)\nodejs\node_modules\npm\node_modules Nicht sicher, wie dies geschieht. Welches ist welches und warum haben sie es so gemacht?
Zipzit
1

Für Windows 10 musste ich gulp lokal im Ordner installieren:

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

npm install gulp

Dies behebt mein Problem "Schlucken wird nicht erkannt"

Bizz Websites
quelle
0

Laden Sie einfach den Knoten von diesem herunter und installieren Sie ihn erneut. Dadurch werden alle Pfadprobleme behoben.

Vergessen Sie nicht, Ihre Eingabeaufforderung oder Ihr Terminal neu zu starten.

Mahendra
quelle
0

Alle oben genannten Antworten haben bei mir nicht funktioniert. Das einzige, was letztendlich funktionierte, war das Hinzufügen von% AppData% \ npm zur Umgebungspfadvariablen AND das Löschen der beiden ng-Dateien in C: \ Programme \ nodejs.

Die ng-Pakete wurden nicht in C: \ Programme \ nodejs \ node_modules installiert, daher war es offensichtlich, dass die Verwendung der ng-Binärdatei aus dem Verzeichnis nodejs nicht funktionieren würde.

Ich bin nicht sicher, warum es in diesem Verzeichnis gesucht hat, da ich bereits - PATH-Umgebungsvariable - .npmrc in C: \ Users \ MyUser konfiguriert habe - Versucht, Systemvariablen und / oder NODE_PATH hinzuzufügen

devqon
quelle
-4

Wenn Sie Windows verwenden, sind einige Schritte erforderlich: 1) Erstellen Sie eine Datei mit dem Namen package.json

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

Dabei ist Hallo der Name des Pakets und * die neueste Version Ihrer Abhängigkeit

2) Code in Ihr Projektverzeichnis und führen Sie den folgenden Befehl aus

npm installieren

Es installiert die Abhängigkeiten

Subbu
quelle
4
Dies installiert es nicht global (was die Frage stellt). Dies zieht die Abhängigkeit in die App
bryanmac
Ich habe alles oben Genannte versucht, um meine node.js-Installation davon zu überzeugen, global installierte Module zu erkennen, und KEINES davon funktioniert. Selbst nach der Deinstallation und Neuinstallation von node (v8.11.3 LTS) wird bei jedem Versuch, den Befehl require ("mongodb") in einem node.js-Skript auszugeben, der gleiche Fehler angezeigt: "Modul mongodb kann nicht gefunden werden". Wenn ich jedoch den Befehl "npm ll -g mongodb" gebe, teilt mir NPM mit, dass das Modul installiert ist. Kann mir jemand BITTE eine Bestätigung geben, die mit diesem Problem funktioniert?
David Edwards
UPDATE: Saulius oben hat eine Problemumgehung bereitgestellt, die tatsächlich funktioniert, nämlich die Angabe des vollständigen Pfads zum Modul in der JavaScript-Anweisung require. Aber wenn seine angegebene Beobachtung, dass node.js in den falschen Ordnern nach installierten Modulen sucht, korrekt ist, kann jemand die Entwickler von node.js darauf aufmerksam machen? Weil das Problem immer noch v8.11.3 LTS betrifft.
David Edwards