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?

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.


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/.


6
Genau das, wonach ich gesucht habe.
ap_snitch

55
npm root -g

um den globalen Speicherort von npm_modules zu überprüfen


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.