Die Pakete werden dann in installiert ./install/here/node_modules. Das ist mkdirnotwendig, weil npm sonst könnte ein bereits existierendes wählt node_modulesVerzeichnis weiter oben in der Hierarchie. (Siehe npm-Dokumentation zu Ordnern .)
Es scheint, dass Sie die Datei package.json in diesem alternativen Verzeichnis haben müssen, wenn Sie die Option --prefix verwenden. Gibt es eine Möglichkeit, package.json im aktuellen Verzeichnis zu haben und im alternativen Verzeichnis zu installieren?
2
@fractal Siehe meine Antwort dafür
yunzen
10
@coundy Gibt es eine Möglichkeit, den Pfad für npm install(ohne Paketnamen) anzugeben ? Ich habe das direkt angefragt, aber dann sucht npm package.jsonin der {prefix}. Was ich auch anstrebe ist, in der Lage zu sein, das packages.jsonim Projekt root zu lassen und gleichzeitig alle Pakete in zu installieren {project root}/{project webroot}.
Automatix
Ich bin auf ein Rekursionsproblem gestoßen. Gibt es eine Möglichkeit, es einmal auszuführen? Ich habe es vorübergehend gelöst, indem ich das Verzeichnis gewechselt und dann aufgerufen habe npm install, aber es --prefixscheint eine schönere Lösung zu sein, wenn es keine Rekursion verursacht hat.
adi518
47
In der Dokumentation heißt es: Verwenden Sie die Präfixoption zusammen mit der globalen Option :
Die Präfixkonfiguration ist standardmäßig der Speicherort, an dem der Knoten installiert ist. Auf den meisten Systemen ist dies / usr / local . Unter Windows ist dies die genaue Position der binären Datei node.exe. Auf Unix-Systemen ist es eine Ebene höher , da der Knoten normalerweise unter {Präfix} / bin / Knoten und nicht unter
{Präfix} / Knoten.exe installiert wird .
Wenn das globale Flag gesetzt ist, installiert npm Dinge in dieses Präfix. Wenn es nicht festgelegt ist, wird das Stammverzeichnis des aktuellen Pakets oder das aktuelle Arbeitsverzeichnis verwendet, sofern es nicht bereits in einem Paket enthalten ist.
(Hervorhebung durch sie)
Also in Ihrem Stammverzeichnis können Sie mit installieren
npm install --prefix <path/to/prefix_folder>-g
und es wird den node_modulesOrdner in den Ordner installieren
@Pavlo Ich glaube nicht. Es ist nicht die Antwort auf das OP.
Yunzen
@Pavlo Wenn ein Paket global installiert ist, benötigen Sie es wie immer. Ja, Sie können ein Paket benötigen, das global installiert ist.
Rob Evans
43
Ab npm Version 3.8.6 können Sie verwenden
npm install --prefix ./install/here <package>
im angegebenen Verzeichnis zu installieren. NPM erstellt automatisch einen node_modulesOrdner, auch wenn bereits ein node_modulesVerzeichnis in der höheren Hierarchie vorhanden ist. Sie können a auch package.jsonim aktuellen Verzeichnis haben und es dann mit der folgenden --prefixOption im angegebenen Verzeichnis installieren :
npm install --prefix ./install/here
Ab npm 6.0.0 können Sie verwenden
npm install --prefix ./install/here ./
um die Datei package.json im aktuellen Verzeichnis im Verzeichnis "./install/here" zu installieren. Auf einem Mac ist mir aufgefallen, dass ein Symlink zum übergeordneten Ordner im Verzeichnis node_modules erstellt wird. Aber es funktioniert immer noch.
HINWEIS: NPM berücksichtigt den Pfad, den Sie über die --prefixOption angegeben haben. Es wird gemäß der npm-Dokumentation für Ordner nur dann aufgelöst, wenn npm installes ohne die --prefixOption verwendet wird.
Das scheint nicht zu funktionieren, ich bekomme immerCan't install <current directory>: Missing package name
Tibor Blenessy
1
@TiborBlenessy Angenommen, Sie sprechen von der zweiten Installationsanweisung. Stellen Sie sicher, dass sich in Ihrem aktuellen Verzeichnis eine gültige Datei package.json befindet. Wenn es dann immer noch nicht funktioniert, teilen Sie mir Ihre npm-Version mit. Diese Schritte wurden verwendet, um mit der angegebenen npm-Version zu arbeiten. Und wenn sie es nicht mehr tun, würde ich gerne tief tauchen und zur Grundursache gelangen, und vielleicht kann ich mir eine Alternative ausdenken.
Rohit Sharma
1
@RohitSharma Mit npm 6.0.0 funktioniert diese Methode nicht, da sie die package.jsonDatei in erwartet./install/here
Christian Ivicevic
@ChristianIvicevic Mit npm install --prefix ./install/here ./ können Sie die Datei package.json im aktuellen Verzeichnis im Verzeichnis "./install/here" installieren. Auf einem Mac ist mir aufgefallen, dass ein Symlink zum übergeordneten Ordner im Verzeichnis node_modules erstellt wird. Aber es funktioniert immer noch mit npm 6.0.0
Rohit Sharma
1
@ Tanoro Der dritte Befehl funktioniert mit npm 6.0.0 mit Symlink-Erstellung, wie in der Antwort erwähnt. Ich habe noch nie die ersten beiden Befehle mit npm v3.5.2 ausprobiert, weshalb ich die spezifische Version von npm erwähnt habe, mit der ich es versucht hatte. Sie können die Antwort auch mit Arbeitsbefehlen für andere Versionen aktualisieren.
Rohit Sharma
0
Ich verwende einen Powershell-Build und konnte npm nicht ausführen, ohne das aktuelle Verzeichnis zu ändern.
Endete mit dem Befehl start und gab nur das Arbeitsverzeichnis an:
Antworten:
Sie können die
--prefix
Option verwenden:Die Pakete werden dann in installiert
./install/here/node_modules
. Das istmkdir
notwendig, weil npm sonst könnte ein bereits existierendes wähltnode_modules
Verzeichnis weiter oben in der Hierarchie. (Siehe npm-Dokumentation zu Ordnern .)quelle
npm install
(ohne Paketnamen) anzugeben ? Ich habe das direkt angefragt, aber dann sucht npmpackage.json
in der{prefix}
. Was ich auch anstrebe ist, in der Lage zu sein, daspackages.json
im Projekt root zu lassen und gleichzeitig alle Pakete in zu installieren{project root}/{project webroot}
.npm install
, aber es--prefix
scheint eine schönere Lösung zu sein, wenn es keine Rekursion verursacht hat.In der Dokumentation heißt es: Verwenden Sie die Präfixoption zusammen mit der globalen Option :
(Hervorhebung durch sie)
Also in Ihrem Stammverzeichnis können Sie mit installieren
und es wird den
node_modules
Ordner in den Ordner installierenquelle
require
global installierten Pakete, oder?Ab npm Version 3.8.6 können Sie verwenden
im angegebenen Verzeichnis zu installieren. NPM erstellt automatisch einen
node_modules
Ordner, auch wenn bereits einnode_modules
Verzeichnis in der höheren Hierarchie vorhanden ist. Sie können a auchpackage.json
im aktuellen Verzeichnis haben und es dann mit der folgenden--prefix
Option im angegebenen Verzeichnis installieren :Ab npm 6.0.0 können Sie verwenden
um die Datei package.json im aktuellen Verzeichnis im Verzeichnis "./install/here" zu installieren. Auf einem Mac ist mir aufgefallen, dass ein Symlink zum übergeordneten Ordner im Verzeichnis node_modules erstellt wird. Aber es funktioniert immer noch.
HINWEIS: NPM berücksichtigt den Pfad, den Sie über die
--prefix
Option angegeben haben. Es wird gemäß der npm-Dokumentation für Ordner nur dann aufgelöst, wennnpm install
es ohne die--prefix
Option verwendet wird.quelle
Can't install <current directory>: Missing package name
package.json
Datei in erwartet./install/here
Ich verwende einen Powershell-Build und konnte npm nicht ausführen, ohne das aktuelle Verzeichnis zu ändern.
Endete mit dem Befehl start und gab nur das Arbeitsverzeichnis an:
quelle