Globaler npm-Installationsort unter Windows?

79

Ich bin nicht 100% sicher, aber ich glaube, ich habe Node v5 vom Windows-Installationsprogramm sowohl auf meinem Heim- als auch auf meinem Büro-PC installiert.

Auf meinem Heim-PC finden globale Installationen unter% APPDATA% statt:

(dev) go|c:\srv> which lessc
c:\users\bjorn\appdata\roaming\npm\lessc
c:\users\bjorn\appdata\roaming\npm\lessc.cmd

Auf meinem Büro-PC werden sie unter Programmdateien angezeigt:

(dev) go|w:\srv> which lessc
c:\program files\nodejs\lessc
c:\program files\nodejs\lessc.cmd

Ich muss PyCharms Datei-Watcher den vollständigen Pfad zu einer Reihe dieser globalen Tools zur Verfügung stellen. Da die von mir freigegebene Projektdatei sinnvoll ist, sollten keine globalen Ressourcen in einem Benutzerordner vorhanden sein.

Warum landen die globalen Installationen in verschiedenen Ordnern und wie kann ich sie an einen Ort zwingen, der allen Teammitgliedern gemeinsam ist?

thebjorn
quelle
3 Jahre später hatte ich ein ähnliches Rätsel. Die Antwort stellte sich heraus, dass der Knoten unter c: \ program files \ nodejs eine Junction erstellt hatte, die tatsächlich auf% appdata% \ nvm \ v8.10.0 zeigte. Es gab also die Illusion, die zu dem passen könnte, was Sie gesehen haben.
John Hatton
1
Der Symlink c: \ program files \ nodejs erwies sich als Artefakt von nvm
John Hatton

Antworten:

63

Laut: https://docs.npmjs.com/files/folders

  • Lokale Installation (Standard): Fügt Inhalte in ./node_modules des aktuellen Paketstamms ein.
  • Globale Installation (mit -g): Fügt Dinge in / usr / local oder überall dort ein, wo der Knoten installiert ist.
  • Installieren Sie es lokal, wenn Sie es benötigen ().
  • Installieren Sie es global, wenn Sie es in der Befehlszeile ausführen möchten. -> Wenn Sie beide benötigen, installieren Sie sie an beiden Stellen oder verwenden Sie den npm-Link.

Präfix Konfiguration

Die Präfixkonfiguration ist standardmäßig der Speicherort, an dem der Knoten installiert ist. Auf den meisten Systemen ist dies der Fall /usr/local. Unter Windows ist dies die genaue Position der binären Datei node.exe .

Die Dokumente sind möglicherweise etwas veraltet, erklären jedoch, warum globale Installationen in verschiedenen Verzeichnissen landen können:

(dev) go|c:\srv> npm config ls -l | grep prefix
; prefix = "C:\\Program Files\\nodejs" (overridden)
prefix = "C:\\Users\\bjorn\\AppData\\Roaming\\npm"

Basierend auf den anderen Antworten scheint es, dass die Überschreibung jetzt der Standardspeicherort unter Windows ist und dass ich möglicherweise meine Office-Version installiert habe, bevor diese Überschreibung implementiert wurde.

Dies schlägt auch eine Lösung vor, um alle Teammitglieder dazu zu bringen, Globals im selben absoluten Pfad relativ zu ihrem PC zu speichern, dh (als Administrator ausgeführt):

mkdir %PROGRAMDATA%\npm
setx PATH "%PROGRAMDATA%\npm;%PATH%" /M
npm config set prefix %PROGRAMDATA%\npm

Öffnen Sie ein neues cmd.exe-Fenster und installieren Sie alle globalen Pakete neu.

Erklärung (von lineno.):

  1. Erstellen Sie einen Ordner an einem vernünftigen Ort, an dem die Globals gespeichert werden sollen (Microsoft besteht darauf, dass Sie nicht in ProgramFiles schreiben sollten, daher scheint% PROGRAMDATA% der nächste logische Ort zu sein.
  2. Das Verzeichnis muss sich im Pfad befinden. Verwenden Sie setx .. /Mdaher den Systempfad (unter HKEY_LOCAL_MACHINE). Dafür müssen Sie dies in einer Shell mit Administratorrechten ausführen.
  3. Sagen Sie npm, diesen neuen Pfad zu verwenden. (Hinweis: Der Ordner ist in% PATH% in dieser Shell nicht sichtbar, daher müssen Sie ein neues Fenster öffnen.)
thebjorn
quelle
Warnung: Aus irgendeinem Grund stellt der Befehl setx PATH "%PROGRAMDATA%\npm;%PATH%" /Mkeinen neuen Wert voran, sondern ersetzt alles (in PowerShell).
Rubens Mariuzzo
45

Dies sind typische npm-Pfade, wenn Sie ein Paket global installieren:

Windows XP -             %USERPROFILE%\Application Data\npm\node_modules
Newer Windows Versions - %AppData%\npm\node_modules
or -                     %AppData%\roaming\npm\node_modules
Dennis Stücken
quelle
1
Hmm .. %APPDATA%befindet sich unter einem Benutzerordner, und PyCharm scheint keine Umgebungsvariablen zu akzeptieren. Ich denke, dies ist dann ein No-Go.
Thebjorn
7
Dies ist falsch. Korrigieren Sie Ihre Antwort. ~ / AppData / Roaming / npm / Knotenmodule $ npm / c / Benutzer / Phil / AppData / Roaming / npm / npm: Zeile 12: Knoten: Befehl nicht gefunden
Philip Rego
15

Drücken Sie einfach die Windows-Taste, geben Sie% APPDATA% ein und geben Sie die Eingabetaste ein.

Oben finden Sie den Speicherort des Ordners \ npm \ node_modules. Hier befinden sich globale Module in Ihrem System.

Subhan Luckiest
quelle
1
Wenn Sie sich meine Frage ansehen, werden Sie feststellen, dass Ihre Behauptung falsch ist. Die globalen Module können auch unter installiert werden. Dies %PROGRAMFILES%\nodejsist meine erste Frage (warum landen sie in verschiedenen Ordnern auf meinen Heim- / Büro-PCs?). Der Kontext meiner Frage (wie angegeben) ist, dass ich den Pfad zu diesen global npm installierten Tools für die PyCharm-IDE bereitstellen muss, damit andere Teammitglieder davon profitieren können, dass ich sie für unsere Projekte korrekt einrichte. Da (a) PyCharm bei der Angabe der ausführbaren Datei keine Umgebungsvariablen zulässt und (b) %APPDATA%=c:\Users\bjorn\..ich APPDATA hier nicht verwenden kann.
Thebjorn
-2

Wenn Sie nur herausfinden möchten, wo npm Ihr globales Modul installiert (Titel dieses Threads), sehen Sie sich die Ausgabe beim Ausführen an npm install -g sample_module

$ npm install -g Beispielmodul C: \ Benutzer \ Benutzer \ AppData \ Roaming \ npm \ Beispielmodul -> C: \ Benutzer \ Benutzer \ AppData \ Roaming \ npm \ Knotenmodule \ Beispielmodul \ bin \ Beispielmodul.js + [email protected] 1 Paket in 2.821s aktualisiert

java-addict301
quelle
Die Frage ist die gesamte Frage, nicht nur der Titel. Ich denke nicht, dass dies eine Antwort auf meine Frage ist.
Thebjorn
@thebjorn Ich glaube nicht, dass Ihr Fragentitel spezifisch genug ist, und daher werden Leute wie ich ihn finden, die nach dem Installationsort für npm suchen, nicht danach, wie er geändert werden kann oder warum es verschiedene Ordner usw. gibt
java- addict301
Die akzeptierte Antwort enthält die Antwort auf Ihre Frage: npm config ls -l | grep prefixund selbst wenn dies nicht der Fall wäre, wäre das richtige Verfahren, eine neue, eng fokussierte Frage zu stellen ...
thebjorn
Auf jeden Fall nicht einfacher, da Sie etwas installieren müssen, anstatt nur etwas nachzuschlagen (was es unbrauchbar macht, z. B. für Shell / Bat-Skripte).
Thebjorn
Dies ist der Fall, wenn Sie herausfinden möchten, wo Ihre globalen Module während der Installation abgelegt werden (wie in meinem Fall und wahrscheinlich bei anderen, die diese Frage anhand des aktuellen Titels finden).
Java-Addict301