741 Stimmen

Wie kann man ausführbare Dateien aus einem lokal installierten Paket in node_modules verwenden?

Wie verwende ich eine lokale Version eines Moduls in node.js . In meiner App habe ich zum Beispiel coffee-script installiert:

npm install coffee-script

Dies installiert es in ./node_modules und der Kaffee-Befehl ist in ./node_modules/.bin/coffee . Gibt es eine Möglichkeit, diesen Befehl auszuführen, wenn ich mich im Hauptordner meines Projekts befinde? Ich denke, ich suche nach etwas Ähnlichem wie bundle exec im Bündler. Im Grunde möchte ich eine Version von coffee-script festlegen, die alle am Projekt Beteiligten verwenden sollen.

Ich weiß, ich kann die -g Flagge, um es global zu installieren, so dass Coffee überall gut funktioniert, aber was ist, wenn ich verschiedene Versionen von Coffee pro Projekt haben möchte?

744voto

regular Punkte 7517

UPDATE : Wie Seyeong Jeong in ihrer Antwort unten darlegt, können Sie seit npm 5.2.0 npx [command] was bequemer ist.

OLD ANSWER für Versionen vor 5.2.0 :

Das Problem bei der Umsetzung

./node_modules/.bin

in Ihrem PATH ist, dass es nur funktioniert, wenn Ihr aktuelles Arbeitsverzeichnis die Wurzel Ihrer Projektverzeichnisstruktur ist (d.h. der Ort von node_modules )

Unabhängig davon, welches Ihr Arbeitsverzeichnis ist, können Sie den Pfad der lokal installierten Binärdateien mit

npm bin

So führen Sie eine lokal installierte coffee Binärdatei unabhängig davon, wo Sie sich in der Hierarchie des Projektverzeichnisses befinden, können Sie dieses Bash-Konstrukt verwenden

PATH=$(npm bin):$PATH coffee

Ich habe dies auf npm-exec umgeleitet

alias npm-exec='PATH=$(npm bin):$PATH'

So, jetzt kann ich

npm-exec coffee

die korrekte Kopie von Coffee auszuführen, egal wo ich bin

$ pwd
/Users/regular/project1

$ npm-exec which coffee
/Users/regular/project1/node_modules/.bin/coffee

$ cd lib/
$ npm-exec which coffee
/Users/regular/project1/node_modules/.bin/coffee

$ cd ~/project2
$ npm-exec which coffee
/Users/regular/project2/node_modules/.bin/coffee

630voto

Seyeong Jeong Punkte 9842

Nice example

Sie brauchen nicht zu manipulieren $PATH mehr!

En npm@5.2.0 , npm Schiffe mit npx Paket, mit dem Sie Befehle von einem lokalen Rechner aus ausführen können node_modules/.bin oder aus einem zentralen Cache.

Einfach laufen:

$ npx [options] <command>[@version] [command-arg]...

Standardmäßig, npx prüft, ob <command> besteht in $PATH oder in den lokalen Projekt-Binärdateien, und führen Sie es aus.

Aufruf von npx <command> wenn <command> ist nicht bereits in Ihrem $PATH installiert automatisch ein Paket mit diesem Namen aus der NPM-Registrierung für Sie und ruft es auf. Danach wird das installierte Paket nirgendwo in Ihren Globals zu finden sein, so dass Sie sich langfristig keine Sorgen um die Verschmutzung machen müssen. Sie können dieses Verhalten verhindern, indem Sie --no-install Option.

Para npm < 5.2.0 können Sie Folgendes installieren npx Paket manuell, indem Sie den folgenden Befehl ausführen:

$ npm install -g npx

123voto

jassa Punkte 19613

Verwenden Sie die npm bin um das Verzeichnis node modules /bin Ihres Projekts abzurufen

$ $(npm bin)/<binary-name> [args]

z.B..

$ $(npm bin)/bower install

86voto

jla Punkte 6094

Verwenden Sie npm run[-script] <script name>

Nach der Installation des bin-Pakets mit npm in Ihrem lokalen ./node_modules Verzeichnis, ändern package.json zum Hinzufügen <script name> wie diese:

$ npm install --save learnyounode
$ edit packages.json
>>> in packages.json
...
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "learnyounode": "learnyounode"
},
...
$ npm run learnyounode

Es wäre schön, wenn npm install eine --add-script Option hätte oder wenn npm run ohne das Hinzufügen zum Skriptblock funktionieren würde.

65voto

Dheeraj Bhaskar Punkte 17881

Update: Wenn Sie die aktuelle npm (Version >5.2) verwenden

Sie können verwenden:

npx <command>

npx sucht den Befehl in .bin Verzeichnis Ihres node_modules

alte Antwort:

Für Windows

Speichern Sie das Folgende in einer Datei namens npm-exec.bat und fügen Sie es zu Ihrem %PATH%

@echo off
set cmd="npm bin"
FOR /F "tokens=*" %%i IN (' %cmd% ') DO SET modules=%%i
"%modules%"\%*

Verwendung

Dann können Sie es wie folgt verwenden npm-exec <command> <arg0> <arg1> ...

Zum Beispiel

Zur Ausführung wdio im lokalen Verzeichnis node_modules installiert ist, tun:

npm-exec wdio wdio.conf.js

d.h. es wird ausgeführt .\node_modules\.bin\wdio wdio.conf.js

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X