Wo sollen meine npm-Module unter Mac OS X installiert werden?

81

Ich habe versucht, ein Upgrade phonegapdurchzuführen, npmals ich auf Probleme stieß. Kurz gesagt, es gibt zwei node_modulesVerzeichnisse auf meinem Computer.

/usr/local/lib/node_modules
/usr/local/share/npm/lib/node_modules

Beim Ausführen npm upgrade -g phonegapwird anscheinend npmdie Kopie des Pakets aktualisiert, in dem sich das Paket befindet /usr/local/lib/node_modules. Wenn ich jedoch which phonegapfinde, dass der Symlink auf die ältere Installation unter verweist /usr/local/share/npm/lib/node_modules.

Wenn ich versuche, ein eigenständiges Paket wie z. B. zu installieren express, werden die Dateien im /usr/local/lib/node_modulesVerzeichnis installiert , aber an keiner Stelle in meinem Verzeichnis wird ein Symlink zur ausführbaren Datei erstellt $PATH.

Zwei Fragen:

  • Welches ist das richtige Verzeichnis für Knotenmodule unter Mac OS X?
  • Wie kann ich konfigurieren npm, dass ausführbare Dateien in meinem verknüpft werden, $PATHwenn Software installiert wird?

Bonuspunkte: nodeBeeinflusst die Installationsmethode die Konfiguration? Es gibt viele Möglichkeiten .


BEARBEITEN : Ich habe herausgefunden, dass Symlinks in meinem erstellt wurden /usr/local/bin, aber mein .bash_profilewurde mit /usr/local/share/npm/binvor /usr/local/binin meinem eingerichtet $PATH. Ich erinnere mich vage, dass ich diesen Pfad irgendwann zu meinem Profil hinzugefügt habe, aber ich bin mir nicht sicher, warum.

Nun stellt sich die Frage: Wie bin ich zu zwei verschiedenen node_modulesVerzeichnissen auf meinem Computer gekommen und warum sollte ich meine node_modulesim share/npm/libUnterverzeichnis haben wollen, anstatt direkt in /usr/local/lib?

Ben Harold
quelle

Antworten:

113

/usr/local/lib/node_modules ist das richtige Verzeichnis für global installierte Knotenmodule.

/usr/local/share/npm/lib/node_modulesmacht für mich keinen Sinn. Ein Problem hierbei ist, dass Sie verwirrt sind, weil es zwei Verzeichnisse mit dem Namen node_modules gibt :

/usr/local/lib/node_modules
/usr/local/lib/node_modules/npm/node_modules

Letzteres scheint ein Knotenmodul zu sein, das mit Node geliefert wurde, z. B. lodashwenn es sich bei dem ersteren um Knotenmodule handelt, mit denen ich installiert habe npm.

Thomas David Kehoe
quelle
1
Was ist der Unterschied zwischen diesen beiden Knoten? Für OS X wird empfohlen, bei der Installation die vom Knoten zu verwenden. Sollte es besser sein, auf eine ordnungsgemäße Installation von npm umzusteigen?
Alicia
2
Installiert npm2 von Macports, fehlen Ihre Pfade an diesen Orten, auch als in / opt / local / share nicht vorhanden.
Holms
68

Zweiter Thomas David Kehoe , mit folgendem Vorbehalt -

Wenn Sie den Node Version Manager (nvm) verwenden, werden Ihre globalen Knotenmodule unter der Version des Knotens gespeichert, die Sie zum Zeitpunkt des Speicherns des Moduls verwenden.

Also ~/.nvm/versions/node/{version}/lib/node_modules/.

Ginna
quelle
6
Genau das, wonach ich gesucht habe.
ap_snitch
55
npm root -g

um den globalen Speicherort von npm_modules zu überprüfen

faulerTank
quelle
4

Wenn Sie wissen möchten, wo sich Ihre NPM-Pakete befinden, sollten Sie:

which npm // locate a program file in the user's path SEE man which
// OUTPUT SAMPLE
/usr/local/bin/npm
la /usr/local/bin/npm // la: aliased to ls -lAh SEE which la THEN man ls
lrwxr-xr-x  1 t04435  admin    46B 18 Sep 10:37 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js

Da npm selbst ein NODE-Paket ist, wird es am selben Speicherort wie andere Pakete ( EUREKA ) installiert . Um dies zu bestätigen, sollten Sie in node_modules cd und das Verzeichnis auflisten.

cd /usr/local/lib/node_modules/
ls
#SAMPLE OUTPUT
@angular npm .... all global npm packages installed

ODER

npm root -g

Gemäß @anthonygores Kommentar

T04435
quelle
4
Einfacher: npm root -g
anthonygore
1
für mich npm root -gund which npmgab nicht die gleichen Ergebnisse. Ich wollte deinstallieren , expo-cliund es gelang mir durch Entfernen expound expo-cliVerzeichnisse aus /usr/local/bin/npm. Vielen Dank an T04435!
Aleksandar