Kann mir jemand sagen, wo ich die Node.js-Module finden kann, die ich mit npm
installiert habe?
Antworten
Zu viele Anzeigen?Aus den Dokumenten:
In npm 1.0 gibt es zwei Möglichkeiten, Dinge zu installieren:
global —- Dies platziert Module in
{prefix}/lib/node_modules
und legt ausführbare Dateien in{prefix}/bin
ab, wobei{prefix}
normalerweise etwas wie/usr/local
ist. Es installiert auch Handbücher in{prefix}/share/man
, wenn sie bereitgestellt werden.lokal —- Dies installiert Ihr Paket im aktuellen Arbeitsverzeichnis. Node-Module werden in
./node_modules
abgelegt, ausführbare Dateien in./node_modules/.bin/
und Handbücher werden überhaupt nicht installiert.
Sie können Ihr {prefix}
mit npm config get prefix
erhalten. (Nützlich, wenn Sie Node mit nvm installiert haben).
Windows 10: Als ich npm prefix -g
ausführte, bemerkte ich, dass der Installationsort innerhalb des Git-Shell-Pfads lag, den ich verwendet hatte. Selbst als dieser Ort zum Pfad hinzugefügt wurde, wurde der Befehl aus dem global installierten Paket nicht erkannt. Behoben durch:
npm config edit
ausführen- Prefix in 'C:\Users\Benutzername\AppData\Roaming\npm' ändern
- diesen Pfad zur Systempfadvariable hinzufügen
- das Paket mit -g neu installieren.
Von den Docs:
Pakete werden unter dem Präfix in den node_modules-Ordner abgelegt. Bei einer lokalen Installation bedeutet dies, dass Sie require("paketname") verwenden können, um sein Hauptmodul zu laden, oder require("paketname/lib/pfad/zum/untermodul") um andere Module zu laden.
Globale Installationen auf Unix-Systemen gehen nach {prefix}/lib/node_modules. Globale Installationen auf Windows gehen nach {prefix}/node_modules (das heißt, ohne lib-Ordner.)
Gebündelte Pakete werden auf dieselbe Weise installiert, außer dass sie in einem Unterordner des entsprechenden node_modules-Ordners gruppiert werden, der mit dem Namen des Scope-Präfixes durch das @-Symbol gekennzeichnet ist, z.B. würde npm install @myorg/paket das Paket in {prefix}/node_modules/@myorg/paket platzieren. Details finden Sie unter Scope.
Wenn Sie ein Paket mit require() verwenden möchten, dann installieren Sie es lokal.
Sie können Ihr {prefix}
mit npm config get prefix
erhalten. (Nützlich, wenn Sie Node mit nvm installiert haben).
Wenn Sie versuchen, auf Ihr globales Verzeichnis aus dem Code zuzugreifen, können Sie von process.execPath
zurückgehen. Zum Beispiel, um wsproxy
zu finden, das sich in {NODE_GLOBAL_DIR}/bin/wsproxy
befindet, können Sie einfach:
path.join(path.dirname(process.execPath), 'wsproxy')
Es gibt auch, wie der npm
CLI funktioniert @ ec9fcc1
/lib/npm.js#L254 mit:
path.resolve(process.execPath, '..', '..')
Siehe auch ec9fcc1
/lib/install.js#L521:
var globalPackage = path.resolve(npm.globalPrefix,
'lib', 'node_modules', moduleName(pkg))
Wo globalPrefix
standardmäßig in ec9fcc1
/lib/config/defaults.js#L92-L105 gesetzt ist:
if (process.env.PREFIX) {
globalPrefix = process.env.PREFIX
} else if (process.platform === 'win32') {
// c:\node\node.exe --> prefix=c:\node\
globalPrefix = path.dirname(process.execPath)
} else {
// /usr/local/bin/node --> prefix=/usr/local
globalPrefix = path.dirname(path.dirname(process.execPath))
// destdir wird nur auf Unix beachtet
if (process.env.DESTDIR) {
globalPrefix = path.join(process.env.DESTDIR, globalPrefix)
}
}