Wie kann ich mehrere npm-Scripte parallel?
In meinem package.json
habe ich diese zwei Skripte:
"scripts": {
"start-watch": "nodemon run-babel index.js",
"wp-server": "webpack-dev-server",
}
Habe ich zu laufen, diese 2 Skripte parallel jedesmal, wenn ich starten Sie die Entwicklung im Node.js. Das erste, was ich dachte, war ein drittes Skript wie dieses:
"dev": "npm run start-watch && npm run wp-server"
... aber das wird warten start-watch
zu beenden, bevor Sie läuft wp-server
.
Wie kann ich diese parallel? Bitte beachten Sie, dass ich brauche, um zu sehen, die output
dieser Befehle. Auch wenn die Lösung umfasst ein build-tool, ich würde eher verwenden gulp
statt grunt
weil ich bereits in einem anderen Projekt.
&&
werden die Skripts ausführen nacheinander, während &
wird, führen Sie diese in parallel.InformationsquelleAutor André Pena | 2015-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie ein Paket namens gleichzeitig.
npm i concurrently --save-dev
Dann richten Sie Ihre
npm run dev
Aufgabe so:node ./node_modules/concurrently/src/main.js
ist nicht erforderlich.concurrent
wird nur gut funktionieren, in scripts da das Modul installiert bin zu./node_modules/.bin/concurrent
Es gibt auch parallelshell. Ich empfehle eigentlich, dass man als
concurrently
verwendet, mehrere Datenströme, die Sauerei mit der Ausgabe der Konsole (Farben können gehen seltsam, cursor verschwunden) in der Erwägung, dassparallelshell
nicht das Problem.Die Fehler, die gleichzeitig erwähnt von @StijndeWitt wurden nun behoben in 2.0.0 Version. Sie können
--raw
- Modus zu erhalten Farben in der Ausgabe.parallelshell worden ist veraltet, zu Gunsten der npm-run-alle github.com/keithamus/...
Es muss einen besseren Weg für uns zu verwalten Javascript build/Skripte auszuführen. Alles für diese Plattform scheint geheftet zusammen. Zitate mit Anführungszeichen escaped und npm-builds zu nennen, andere "npm-run" baut.. Das ist immer ziemlich schmerzhaft.
InformationsquelleAutor Neil Kistner
Mit den Parallel-Paket funktioniert, aber die Sie nicht brauchen, um dies zu erreichen. Sie können nur mit einem Rohr auf UNIX-basierten Rechnern laufen gleichzeitigen Aufgaben. Ich würde vorschlagen, diese Methode über die andere, weil es erspart Ihnen das hinzufügen einer zusätzlichen Abhängigkeit.
Hinweis: der erste Befehl seine Ausgabe ignoriert
Wenn Sie git auf windows, funktioniert es mit der git-bash zur Verfügung gestellt. Und wenn Sie stark von der Entwicklung auf windows mit git, empfehle ich cmder oder ConEmu als Ersatz für die Standard-Konsole und verwenden Sie es mit der Git-Bash als Standard-cmd.
Ich weiß, wie ich hinzufügen unix-tools Weg. Der Punkt ist
npm scripts
ausgeführt werden cmd.exe so können Sie nicht verwenden&
laufen Sie parallel:&
funktioniert auf Windows, aber es funktioniert anders. Auf OSX läuft es dann beide Befehle gleichzeitig, aber auf Windows, es wird führen Sie den ersten Befehl, und nachdem der erste Befehl vorhanden ist, wird es den zweiten Befehl ausführen. stackoverflow.com/questions/30950032/...OP explizit erwähnt wird, dass Sie die Ausgabe der beiden Befehle... das leitet die Ausgabe des ersten Befehls in die zweite als Eingang. Die Daten, die könnte werden ignoriert und gehen verloren, um den Benutzer im schlimmsten Fall die Daten werden interpretiert als Eingang genutzt werden soll (duh!) und tut etwas völlig unerwartetes! Aus diesem Grund bin ich bis stimmberechtigten diese Antwort!
Dies tun seltsame Dinge, wenn der zweite Befehl kann von stdin Lesen, und wird es zu verbergen die Ausgabe des ersten Befehls.
InformationsquelleAutor Patrick Burtchaell
Wenn Sie eine UNIX-artige Umgebung, nutzen Sie einfach
&
als Trennzeichen:Sonst, wenn Sie interessiert sind an einem cross-Plattform-Lösung, die Sie nutzen könnten npm-run-alle Modul:
a && b
beginntb
nacha
erfolgreich beendet, aber nodemon hört nie ohne Fehler, so kann das nicht funktionieren.a & b
beginnta
, rückt es in den hintergrund und beginntb
sofort. Gewinnen!a | b
pipes der stdout vona
zu den stdin vonb
erfordert beide gleichzeitig laufen. Obwohl dies erscheinen mag, um den gewünschten Effekt haben, sollten Sie nicht verwenden es hier.ist eine wirklich schlechte Idee, da es trennt den Prozess. Es bedeutet, dass
npm
wird nicht der übergeordnete Prozess nicht mehr. Sie werden am Ende mit einem zombienpm run start-watch
, die nicht getötet werden, mitctrl-c
.Fügen Sie einfach
wait
zu mildern problem mit hängenden Prozesse:"dev": "npm run start-watch & npm run wp-server & wait"
Es ist kein zombie. Aber
&
auf unix verhindert, dass der Befehl reagiert, um C-c/C-z und auch verhindert Ihre Rückkehr-code von der Vermehrung, im Falle eines Ausfalls.InformationsquelleAutor Diogo Cardoso
Aus der windows-cmd, die Sie verwenden können
start
:Jeden Befehl gestartet, dieser Weg beginnt in einem eigenen Fenster.
Dies funktioniert nicht, wenn Sie haben watcher Aufgaben, da
&&
wartet auf den ersten Befehl zu beenden, bevor der zweite Befehl und ein watcher Aufgabe wird nie abgeschlossen.Die Befehle werden eingeleitet mit dem "start" - Befehl öffnet eine neue Kommandozeile, die für jeden der Befehle. Ich war auf den ersten verwirrt, weil ich dachte "mit && - operator wird nicht funktionieren". Diese Lösung ist sehr einfach und benötigt keine zusätzlichen Pakete/Arbeit vom Entwickler.
Das ist falsch. Wird der Befehl nacheinander ausgeführt werden. Unter Windows müssen Sie über ein Plug-in zum ausführen von Befehlen gleichzeitig.
vielen Dank, es funktioniert. wie kann es falsch?!
InformationsquelleAutor o.v.
Sollten Sie verwenden npm-run-alle (oder
concurrently
,parallelshell
), denn es hat mehr Kontrolle über das starten und das töten Befehlen. Die Betreiber&
,|
sind schlechte Ideen, da musst du manuell beenden, nachdem alle tests fertig sind.Dies ist ein Beispiel für Winkelmesser Prüfung durch npm:
-p
= Befehle parallel auszuführen.-r
= Töte alle Befehle, wenn einer von Ihnen endet mit einem exit-code von null.Läuft
npm run test
startet Selenium-Treiber, starten Sie den http-server (dienen Sie Dateien), und führen Sie einen Winkelmesser tests. Sobald alle tests fertig sind, wird es in der Nähe der http-server und den selenium-Treiber.Ich Frage mich, wie das funktioniert einwandfrei für das ausführen der tests obwohl. Während der webdriver-start-und http-server können parallel ausgeführt werden, den Winkelmesser Aufgabe sollte nur ausgeführt werden, nachdem die ersten beiden.
für die Reihenfolge abhängiger Aufgaben, warum nicht einfach
gulp
undgulp-sync
?InformationsquelleAutor nir
Eine bessere Lösung ist die Verwendung
&
Ich wusste nicht, dass. Welche Plattformen geht es nicht auf? @Corey - aktualisieren Sie Ihre Antwort mit der Warnung, die auf inter-op-und ich werde Sie upvote
&
funktioniert auf Windows, aber es funktioniert anders. Auf OSX läuft es dann beide Befehle gleichzeitig, aber auf Windows, es wird führen Sie den ersten Befehl, und nachdem der erste Befehl vorhanden ist, wird es den zweiten Befehl ausführen.Nein, es ist nicht so, es trennt den Prozess, werden Sie nicht in der Lage zu töten, die es auf einfache Art und Weise.
Das ist es, was ich erwartete zu. Jedoch, ich versuchte dies und es bedeutet töten alle drei Verfahren (dev, start-Uhr, und wp-server), wenn Sie drücken Sie Strg+C.
InformationsquelleAutor Corey
Wenn Sie ersetzen die doppelte kaufmännisches und-Zeichen mit ein einzelnes kaufmännisches und-Zeichen, die Skripte gleichzeitig ausgeführt werden.
Weil das nicht funktioniert auf die gleiche für alle Plattformen, wie Sie sehen können, in anderen Antworten.
InformationsquelleAutor Neil Girardi
Habe ich überprüft, fast alle Lösungen von oben und nur mit npm-run-alle ich war in der Lage, alle Probleme zu lösen. Haupt-Vorteil gegenüber allen anderen Lösungen ist die Fähigkeit Skript ausführen mit Argumenten.
Dies ermöglicht es mir, führen Sie den Befehl mit Argumenten wie
npm run test:watch -- Something
.EDIT:
Gibt es eine weitere nützliche option für
npm-run-all
:Hinzufügen
-r
zu Ihremnpm-run-all
Skript zu töten alle Prozesse, wenn man fertig mit code0
. Dies ist besonders nützlich, wenn Sie ein HTTP-server und ein script, dass den server nutzen.InformationsquelleAutor Darkowic
Ich habe eine crossplattform-Lösung ohne zusätzliche Module. Ich war auf der Suche nach so etwas wie einem try-catch-block könnte ich sowohl in der cmd.exe und in der bash.
Die Lösung ist
command1 || command2
die scheint zu funktionieren in beiden Umgebungen gleich. So ist die Lösung für den OP ist:Dann einfach
npm start
(undnpm run dev
) wird auf allen Plattformen!irgendwelche details? wo genau dieses nicht funktioniert?
Dies funktioniert für mich. Danke @EntityBlack
InformationsquelleAutor Entity Black
Schnelle Lösung
In diesem Fall würde ich sagen, dass die beste WetteWenn dieses Skript für ein eigenes Modul soll nur auf *nix-basierten Maschinen, können Sie die control-operator für die Verzweigung Prozesse, die wie folgt aussieht:&
Ein Beispiel dies zu tun, in einer teilweisen Paket.json-Datei:
Würden Sie dann führen Sie beide parallel über
npm run serve-bundle
. Sie können zur Verbesserung der Skripte für die Ausgabe der pids der Gabel Prozess in eine Datei etwa so:Google so etwas wie bash-control-operator für die Verzweigung um mehr darüber zu erfahren, wie es funktioniert. Ich habe auch einige weitere Kontext in Bezug auf die Nutzung von Unix-Techniken im Knoten Projekte unter:
Weiteren Kontext RE: Unix-Tools & Node.js
Wenn Sie nicht auf Windows -, Unix-tools/- Techniken funktionieren oft gut, etwas zu erreichen, mit Knoten Skripts da:
Module für system-Aufgaben in Nodeland sind auch oft Abstraktionen oder Annäherungen von Unix-tools, von
fs
zustreams
.&
Betreiber wird unter Windows nicht unterstützt.mein post sagt "Wenn Sie nicht auf Windows...". 0% der Leute, die ich arbeiten mit, bei einem der größten tech-Firmen der Welt, die ausführen von Knoten unter Windows. Also ganz klar mein post ist immer noch wertvoll für viele Entwickler.
Es ist eine Art von einer kreisförmigen Art und Weise der Argumentation ist es nicht, obwohl? Wenn Sie schreiben Ihre npm-Skripte wie diese werden Sie nicht können verwenden Windows, weil es nicht funktionieren. Damit niemand die Windows verwendet, so spielt es keine Rolle, dass es nicht funktioniert... Sie am Ende mit Plattform-abhängigen software. Nun, wenn die Sache, die getan werden muss, ist sehr schwer zu tun, cross-Plattform, als, dass könnte ein guter trade-off zu machen. Aber das problem hier ist sehr leicht zu tun, mit standard-npm-Skripts, wie z.B. gleichzeitig und parallelshell.
Keiner meiner Argumentation war kreisförmig. Ich machte eine Feststellung der Tatsache sans Argumentation. Wir sind posting-Techniken üblich-zu-Knoten-Entwickler, von denen viele build & Deployment auf Linux-Servern. Ja, es sollte unter Windows funktionieren, wenn es ein userland-script, aber die Mehrheit der npm-Skripte sind für die Entwicklung und Bereitstellung, die—zumeist auf *nix Maschinen. In Bezug auf die Module, die Sie erwähnt) es ist eine enorme Strecke nennen, gleichzeitig und parallelshell "standard" (~1500 downloads pro Tag ist weit von der standard-in NPMland) und b) benötigen Sie zusätzliche software, die für einen parallelen Prozess, Sie könnte genauso gut verwenden Schluck.
Ich bin dankbar, darauf aufmerksam gemacht, dass diese Module trotzdem danke
InformationsquelleAutor james_womack
edit:
Müssen Sie npm-run-alle installiert vorher. Überprüfen Sie auch auf dieser Seite für andere Einsatzszenarien.
InformationsquelleAutor noego
Lief ich in Probleme mit
&
und|
, der exit-Status und Fehler werfen, beziehungsweise.Andere Lösungen wollen, führen Sie jede Aufgabe mit einem bestimmten Namen, wie npm-ausführen-alles, was nicht mein Anwendungsfall.
So habe ich npm-laufen-parallel läuft npm-Skripte asynchron und Berichte zurück, wenn Sie fertig sind.
So, für Skripte, es wäre:
npm-run-parallel wp-server start-watch
InformationsquelleAutor ian
Wie über die Verzweigung
Andere Möglichkeit zur Ausführung mehrerer Knoten scripts mit einem einzigen Skript-Knoten, die Gabel viele andere. Forking unterstützt nativ in Knoten, so dass es fügt keine Abhängigkeiten und ist cross-Plattform.
Minimal-Beispiel
Diese würden nur das ausführen von Skripts wie Sie ist und annehmen, Sie befinden sich in der parent-Skript-Verzeichnis.
Verbose Beispiel:
Dies würde die Ausführung der Skripts mit den Argumenten und konfiguriert werden, indem Sie die vielen verfügbaren Optionen.
Kommunikation mit Gabel-Skripte
Gabelungen auch den Vorteil hat, dass das parent-Skript kann Ereignisse empfangen, die von der Gabel-Kind-Prozesse sowie zurück zu senden. Ein gängiges Beispiel ist für das parent-Skript zu töten seine Gabel Kinder.
Weitere Ereignisse und Methoden finden Sie in der
ChildProcess
- DokumentationInformationsquelleAutor Boaz
Können Sie eine
&
für parallel-SkriptRefrence link
InformationsquelleAutor Behnam Mohammadi
Ich habe mit npm-run-alle für einige Zeit, aber ich habe nie zusammen mit ihm, weil Sie die Ausgabe des Befehls im watch-Modus funktioniert nicht gut zusammen. Zum Beispiel, wenn ich starten
create-react-app
undjest
im watch-Modus, ich nur in der Lage, um zu sehen, die Ausgabe von der Letzte Befehl, den ich lief. So sind die meisten der Zeit, ich hatte alle meine Befehle manuell...Dies ist der Grund, warum, ich setze meine eigene lib, run-Bildschirm. Es noch sehr junges Projekt (von gestern :p ), aber es könnte schlimmer sein, es zu betrachten, in Ihrem Fall wäre es:
Dann drücken Sie die numerische Taste
1
zu sehen, die Ausgabe vonwp-server
und drücken Sie0
zu sehen, die Ausgabe vonstart-watch
.InformationsquelleAutor Alexandre
In meinem Fall habe ich zwei Projekte, eines wurde UI und der andere war API, und beide haben eine eigene Schrift, die in Ihren jeweiligen
package.json
- Dateien.So, hier ist was ich getan habe.
node app
) und API - (Winkel in einem Unterordner src, vermutecd src/ng serve
), nur der erste Teil funktioniert. Zum Beispielnode app& cd src& ng serve
.InformationsquelleAutor Vikash Mishra