2014-04-23 6 views
20

ich npm auf Windows laufen ließe und möchte & Stil parallele Operationen in Laufe Skripte verwenden, aber parallel in cmd laufen ist eine Art chaotisch in meinem Paket. jSON-Datei würde Ich magwie für npm Lauf Skripte setzen Shell in Windows

Skripte zu schreib: { "go": "cmd1 & cmd2"}

aber npm führt das Skript unter cmd.exe, die nicht kennt; Ich könnte dies in Skripts ändern: {"go": "batts/bat1.bat") Dabei ist bat1.bat eine cmd bat-Datei, die den windows style-Aufruf oder start-Befehle verwendet, um Befehle parallel auszuführen. das funktioniert, aber ein Skript gibt mir das nur auf Windows arbeitet

es viel einfacher wäre, wenn ich npm bekommen konnte das Skript unter einem Bash Klon ausgeführt werden soll oder Cygwin Ich versuchte config: { „Shell“: „bash "} , aber das lief immer noch cmd.exe

gibt es eine Möglichkeit, npm zu run-Skripte mit einer bestimmten Shell (nicht cmd.exe) zu sagen?

Antwort

17

Hier ist eine Möglichkeit, es zu tun:

  1. Erstellen Sie ein Skript, wie my_script.sh, in Ihrem Projekt bin.
  2. Fügen Sie in Ihrer package.json-Datei eine Zeile hinzu, um das Skript mit bash auszuführen. Zum Beispiel:

    "scripts": { 
        "boogie": "bash bin/my_script.sh" 
    } 
    

Jetzt können Sie Ihre Bash-Skript von NPM durch laufen:

npm run-script boogie 

Nicht sehr elegant, aber es funktioniert.

Wenn Sie sowohl unter Windows als auch unter Linux/Unix entwickeln, ist zumindest dieser Ansatz für beide Umgebungen relativ portabel.

+2

Eine weitere Option: ' "Skripte": { "Start": "Knoten ./bin/www", „bash ":" bash -c ", " ls ":" npm run bash ls " }' – cchamberlain

11

Idealerweise sollte das Überschreiben des npm shell config-Parameters funktionieren, aber npm (mindestens Version 1.4.14) scheint in Windows die Einstellung zu ignorieren und stattdessen cmd.exe zu verwenden.

Verwenden Sie den folgenden Befehl in bash oder Git Bash-Shell, die Shell-Einstellung, um herauszufinden:

$ npm config ls -l | grep shell 

Standardmäßig wird der Ausgang sein:

shell = "C:\\WINDOWS\\system32\\cmd.exe" 

jedoch die Standardeinstellung außer Kraft setzen Shell-Parameter können Sie eine Datei npmrc zum Verzeichnis \ Benutzer \ IhrNutzername \ AppData \ Roaming \ npm \ etc hinzufügen (oder bearbeiten). Fügen Sie einfach die folgende Zeile hinzu:

Der Pfad, den Sie verwenden, kann ein beliebiger gültiger Pfad zu bash.exe sein. Nun, wenn Sie die oben laufen „npm Config ls -l | grep shell“ Befehl erhalten Sie die folgende Ausgabe sehen, was darauf hinweist, dass die Shell-Parameter außer Kraft gesetzt wurde:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe" 
; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden) 

Eines Tages, vielleicht, eine neue Version von npm wird auf den überschriebenen Shell-Parameter achten.

+0

Wunsch dies funktioniert. Ich habe die COMSPEC-Umgebungsvariable geändert und es scheint, dass ich davon abhebe, aber ich konnte es nicht richtig funktionieren lassen. – cchamberlain

+2

Hier ist npm github verwandten Thema https://github.com/npm/npm/issues/6543 – dmi3y

+1

Dies tun den gleichen Job: '$ Npm config set Shell" C: \\ msys64 \\ usr \\ bin \\ bash " – kwarnke

1

Verwenden Sie für diesen Zweck ein speziell erstelltes node_module. Ich empfehle die Verwendung npm-run-all, aber others existiert, wie parallelshell.

Parallelshell Beispiel ist unten für Drop-in-Ersatz für Ihre Frage.

"scripts": { 
    "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\"" 
}, 

folgenden Befehl ein:

npm run parallelexample1 

funktioniert sowohl unter Windows und UNIX (Linux/MacOS).

Interessanterweise unterstützt npm-run-all keine Shell-Befehle; Daher müssen wir alle Shell-Befehle in separate Skripte wie unten setzen.

"scripts": { 
    "parallelexample2": "npm-run-all echo*", 
    "echo1": "echo 1", 
    "echo2": "echo 2", 
    "echo3": "echo 3" 
}, 

folgenden Befehl ein:

npm run parallelexample2 

funktioniert sowohl unter Windows und UNIX (Linux/MacOS).

+0

danke für den Tipp für npm-run-all, ich versuchte die' --parallele "Option auch –

0

nur mit CMD Weg .bat zu laufen!

.json

`` `js

"scripts": { 
    "start": "react-scripts start", 
    "build": "react-scripts build", 
    "test": "react-scripts test --env=jsdom", 
    "eject": "react-scripts eject", 
    "app": "cd build & browser-sync start --server --files 'index.html'", 
    "bat": "start start-browser.bat", 
    "starts": "start http://localhost:7777/datas/ && start http://localhost:7777/Info/" 
}, 

` ``

.bat

`` `sh

start http://localhost:7777/datas/ && start http://localhost:7777/Info/ 

`` `

+0

https://github.com/gildata/RAIO/issues/70 –

10

Seit npm 5,1

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe" 
+1

Das funktionierte perfekt für mich, danke! (Einziger Unterschied ist, dass ich das (x86) nicht brauchte). –

+1

Dies sollte die akzeptierte Antwort sein! Funktioniert unter Windows 10 mit Git Bash (VS-Code enthalten). – AnAurelian

Verwandte Themen