Ich führe npm unter Windows aus und möchte parallele Operationen in Run-Skripten verwenden und formatieren, aber die parallele Ausführung in cmd ist in meiner Datei package.json, die ich schreiben möchte, etwas chaotisch.
scripts: { "go": "cmd1 & cmd2"}
Aber npm führt das Skript unter cmd.exe aus, von dem nicht bekannt ist, dass ;
ich es in Skripte ändern könnte: { "go": "bats/bat1.bat")
Dabei ist bat1.bat eine cmd bat-Datei, die den Windows-Aufruf oder Startbefehle verwendet, um Befehle parallel auszuführen. Das funktioniert, gibt mir aber ein Skript, das nur unter Windows funktioniert.
Es wäre viel einfacher, wenn ich npm dazu bringen könnte, das Skript unter einem Bash-Klon oder Cygwin auszuführen.
Ich habe es versucht,
config: { "shell": "bash"}
aber das lief immer noch cmd.exe
Gibt es eine Möglichkeit, npm anzuweisen, Skripte mit einer bestimmten Shell (nicht cmd.exe) auszuführen?
Antworten:
Seit npm 5.1
npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"
oder (64-Bit-Installation)
npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
Beachten Sie, dass Git für Windows installiert sein muss .
Sie können es zurücksetzen, indem Sie Folgendes ausführen:
quelle
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"
ist die Antwort auf alle meine Probleme beim Ausführen paralleler Skripts unter Windows 10 64-Bit. @DuncanSungWKim 감사 합니다 dafür.npm run <script
mit dieser Konfiguration ausgeführt werde, wird ein neues Git-Bash-Fenster erzeugt, in dem das Skript ausgeführt wird. Das will ich nicht. Gibt es eine Möglichkeit, die Shell innerhalb der aufrufenden Shell einfach aufzurufen?Hier ist eine Möglichkeit, dies zu tun:
Fügen Sie in Ihrer Datei package.json eine Zeile hinzu, um das Skript mit bash auszuführen. Zum Beispiel:
"scripts": { "boogie": "bash bin/my_script.sh" }
Jetzt können Sie Ihr Bash-Skript von npm aus ausführen, indem Sie:
Nicht sehr elegant, aber es funktioniert.
Wenn Sie sowohl unter Windows als auch unter Linux / Unix entwickeln, ist dieser Ansatz zumindest für beide Umgebungen ziemlich portabel.
quelle
"scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
Im Idealfall sollte das Überschreiben des Konfigurationsparameters npm shell 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 Ihrer Bash- oder Git Bash-Shell, um die Shell-Einstellung herauszufinden:
Standardmäßig lautet die Ausgabe:
shell = "C:\\WINDOWS\\system32\\cmd.exe"
Um den Standard-Shell-Parameter zu überschreiben, können Sie jedoch eine npmrc-Datei zum Verzeichnis \ Users \ yourusername \ AppData \ Roaming \ npm \ etc hinzufügen (oder bearbeiten). Fügen Sie einfach die folgende Zeile hinzu:
shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
Der von Ihnen verwendete Pfad kann ein beliebiger gültiger Pfad zu bash.exe sein. Wenn Sie nun den obigen Befehl "npm config ls -l | grep shell" ausführen, wird die folgende Ausgabe angezeigt, die angibt, dass der Shell-Parameter überschrieben wurde:
shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe" ; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)
Vielleicht wird eines Tages eine neue Version von npm auf den überschriebenen Shell-Parameter achten.
quelle
$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
;
Windows getrennte Befehle enthalten. Im Ordner C: \ Benutzer \ Benutzername \ habe ich.npmrc
shell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
Verwenden Sie einfach CMDs Art zu laufen
.json.bat
!
.Schläger"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/" },
quelle
Verwenden Sie zu diesem Zweck ein speziell erstelltes node_module. Ich schlage vor, npm-run-all zu verwenden , aber es gibt andere , wie z. B. Parallelen .
Das folgende Parallelshell-Beispiel dient als Ersatz für Ihre Frage.
"scripts": { "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\"" },
folgenden Befehl:
funktioniert sowohl unter Windows als auch unter 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" },
Folgende Anweisung:
funktioniert sowohl unter Windows als auch unter Unix (Linux / MacOS).
quelle
--parallel
Option ausprobiertIn meinem Fall musste ich nur
npm start
aus Bash heraus rennen . Ich renne,cmd
dann öffne ich Bash, indem ich renne"c:\Program Files\Git\bin\bash.exe"
. Unter Bash - Shell konnte ich dann anrufennpm build
undnpm start
erfolgreich.Möglicherweise haben Sie bereits Bash, wenn Sie Git verwenden. Wenn nicht, können Sie installieren .
Hoffe, das kann jemandem Zeit sparen.
quelle
PORT=8000
Sie können auch plattformübergreifende Powershell https://github.com/powershell/powershell#get-powershell für npm-Skripte verwenden.
Führen Sie dies im Projektstammordner aus, um ein einzelnes Projekt festzulegen:
npm config set script-shell pwsh --userconfig ./.npmrc
So setzen Sie global für alle Knotenprojekte:
npm config set script-shell pwsh [--global]
quelle