Ist es möglich, ein benutzerdefiniertes Paketziel für npm install
entweder über ein Befehlsflag oder eine Umgebungsvariable anzugeben ?
Standardmäßig landen lokale npm-Installationen node_modules
im aktuellen Verzeichnis, aber ich möchte, dass sie beispielsweise in node_modules
einem anderen Verzeichnis installiert werden vendor/node_modules
. Wie kann ich das erreichen?
./node_modules
zu installieren, möchte ich, dass npm sie in Unterverzeichnissen von installiert./vendor/node_modules
. (Oder zu sagen, dass das nicht konfigurierbar ist.)require
d), aber ich möchte es nicht global installieren.Antworten:
TL; DR
Sie können dies tun, indem Sie das
--prefix
Flag und das--global
Flag * verwenden.* Obwohl dies eine "globale" Installation ist, können installierte Bins nur über die Befehlszeile aufgerufen werden, wenn sie in
~/foo/vendor/node_modules
vorhanden sindPATH
.TL; R.
Jedes konfigurierbare Attribut von
npm
kann an sechs verschiedenen Stellen festgelegt werden. Nach Wichtigkeit geordnet:--prefix ./vendor/node_modules
NPM_CONFIG_PREFIX=./vendor/node_modules
$HOME/.npmrc
oderuserconfig
param$PREFIX/etc/npmrc
oderuserconfig
parampath/to/npm/itself/npmrc
Standardmäßig werden lokal installierte Pakete verwendet
./node_modules
. Globale gehen in dieprefix
Konfigurationsvariable (/usr/local
standardmäßig).Sie können ausführen
npm config list
, um Ihre aktuelle Konfiguration anzuzeigen undnpm config edit
zu ändern.PS
Im Allgemeinen ist
npm
die Dokumentation sehr hilfreich. Der Ordnerbereich bietet eine gute strukturelle Übersicht über npm und der Konfigurationsabschnitt beantwortet diese Frage.quelle
./vendor/node_modules/lib/bower
Verwenden vonnpm#3.8.0
No version provided in package.json
bins won't be accessible through the command line
. Das Programm kann natürlich über den vollständigen Pfadnpm install [email protected] -g --prefix c:\my_npm` calling
c: \ my_npm \ eslint --fix my.js`npm install
in Verzeichnis A mit der Datei package.json ausgeführt werde, werden Pakete in Verzeichnis B installiert. Diese Lösung scheint für einzelne Pakete zu gelten, die installiert werden.npm install
Installiert Abhängigkeiten lokal.npm install X -g -prefix "..."
Installiert Modul X auf das Präfix,npm install -g -prefix "..."
installiert das aktuelle Paket auf das Präfix.Wenn Sie dies in config möchten, können Sie npm config wie folgt einstellen:
oder
Überprüfen Sie Ihre Konfiguration mit
npm config ls -l
Oder wie @pje sagt und benutze die
--prefix
Flaggequelle
npm install
wird also weiterhin lokal installiert,./node_modules
abernpm install -g
installiert"$(pwd)/vendor/node_modules"
. Ich kann mir vorstellen, diese Einstellungen zu ändern und sie dann zu vergessen. Später frage ich mich, warum meine globalen Pakete sich seltsam verhalten.Unter OSX können Sie zu Ihrem Benutzer
$HOME
(wahrscheinlich / Users / yourname /) wechseln und, falls noch nicht vorhanden, eine.npmrc
Datei erstellen (eine Datei, die npm für die Benutzerkonfiguration verwendet), und ein Verzeichnis für Ihre npm-Pakete erstellen installiert werden in (z. B. / Users / yourname / npm). Setzen Sie in dieser .npmrc-Datei "Präfix" auf Ihr neues npm-Verzeichnis, in dem "global" installierte npm-Pakete installiert werden. Diese "globalen" Pakete stehen natürlich nur Ihrem Benutzerkonto zur Verfügung.In .npmrc:
prefix=${HOME}/npm
Führen Sie dann diesen Befehl über die Befehlszeile aus:
npm config ls -l
Es sollte eine Ausgabe sowohl für Ihre eigene lokale Konfiguration als auch für die globale npm-Konfiguration liefern, und Sie sollten sehen, dass Ihre lokale Präfixkonfiguration reflektiert wird, wahrscheinlich ganz oben in der langen Liste der Ausgaben.
Aus Sicherheitsgründen empfehle ich diesen Ansatz zum Konfigurieren des npm-Verhaltens Ihres Benutzerkontos beim Durchsuchen Ihrer
/usr/local
Ordner, was ich an anderer Stelle empfohlen habe.quelle
Unter Windows 7 können beispielsweise die folgenden Befehle / Vorgänge verwendet werden.
Erstellen Sie eine persönliche Umgebungsvariable. Doppelte Backslashes sind obligatorisch:
%NPM_HOME%
C:\\SomeFolder\\SubFolder\\
Setzen Sie nun die Konfigurationswerte auf die neuen Ordner (beispielhafte Dateinamen):
npm config set prefix "%NPM_HOME%\\npm"
npm config set cache "%NPM_HOME%\\npm-cache"
npm config set tmp "%NPM_HOME%\\temp"
Optional können Sie den Inhalt der ursprünglichen Ordner löschen, bevor die Konfiguration geändert wird.
Löschen Sie den npm-Cache
npm cache clear
Listen Sie die npm-Module auf
npm -g ls
Löschen Sie die npm-Module
npm -g rm name_of_package1 name_of_package2
quelle
Nachdem ich selbst danach gesucht hatte und wollte, dass mehrere Projekte mit gemeinsamen Abhängigkeiten trockener werden, habe ich Folgendes gefunden:
require()
require()
bin
undman
Wege zu$PATH
npm link
Mit ( info ) können Sie eine lokale Installation als Quelle für Globals verwenden→ Halten Sie sich an den Knotenweg und installieren Sie ihn lokal
ref:
quelle