im Snippet wie folgt:
gulp.task "coffee", ->
gulp.src("src/server/**/*.coffee")
.pipe(coffee {bare: true}).on("error",gutil.log)
.pipe(gulp.dest "bin")
gulp.task "clean",->
gulp.src("bin", {read:false})
.pipe clean
force:true
gulp.task 'develop',['clean','coffee'], ->
console.log "run something else"
In der develop
Aufgabe möchte ich ausführen clean
und nachdem es erledigt ist, laufen coffee
und wenn das erledigt ist, etwas anderes ausführen. Aber das kann ich nicht herausfinden. Dieses Stück funktioniert nicht. Bitte beraten.
javascript
node.js
coffeescript
gulp
iLemming
quelle
quelle
run-sequence
obsolet - siehe Massanishis Antwort untenAntworten:
Es ist noch keine offizielle Version, aber mit Gulp 4.0 können Sie problemlos synchrone Aufgaben mit gulp.series ausführen. Sie können es einfach so machen:
Ich habe einen guten Blog-Beitrag gefunden, in dem vorgestellt wird, wie man diese netten Funktionen aktualisiert und nutzt: die Migration auf gulp 4 anhand eines Beispiels
quelle
gulp.task('coffee', ['clean'], function(){...}); gulp.task('develop', ['coffee']);
Standardmäßig führt gulp Aufgaben gleichzeitig aus, sofern sie keine expliziten Abhängigkeiten aufweisen. Dies ist nicht sehr nützlich für Aufgaben wie
clean
, bei denen Sie nicht abhängig sein möchten, diese aber vor allem anderen ausgeführt werden müssen.Ich habe das
run-sequence
Plugin speziell geschrieben, um dieses Problem mit gulp zu beheben. Verwenden Sie es nach der Installation folgendermaßen:Sie können die vollständigen Anweisungen auf dem Paket README lesen - es unterstützt auch das gleichzeitige Ausführen einiger Aufgabensätze.
Bitte beachten Sie, dass dies in der nächsten Hauptversion von gulp (effektiv) behoben wird , da die automatische Reihenfolge der Abhängigkeiten vollständig beseitigt wird und ähnliche Tools bereitgestellt werden,
run-sequence
mit denen Sie die gewünschte Ausführungsreihenfolge manuell festlegen können.Dies ist jedoch eine wichtige Änderung, sodass es keinen Grund gibt, zu warten, bis Sie sie
run-sequence
heute verwenden können.quelle
gulp-clean
Plugin Streams 2 nicht implementiert, daher gab es Probleme, die als Abhängigkeiten ausgeführt wurden. Dies wurde ab Release Version 0.3.0 behoben. Mein Mitarbeiter hat eine PR eingereicht, um sie zu konvertieren.run-sequence
löst ein kritisches Stück fehlender Funktionalität in gulp.Die einzig gute Lösung für dieses Problem finden Sie in der Schluckdokumentation, die Sie hier finden
quelle
ReferenceError: err is not defined
versuche ich, dies für einegulp-compass
Aufgabe auszuführen. Vermisse ich etwas?return gulp.src('app/**/*.js').pipe(concat(app.js)).pipe(gulp.dest('app/scripts');
besteht der Schlüssel darin, Aufgabe eins als abhängig zu identifizieren, wenn Sie Aufgabe zwei definieren:gulp.task('two', ['one'], function() {...
Aufgabe zwei wartet nun auf das Ende von Aufgabe eins, bevor sie ausgeführt wird.Ich habe eine Node / Gulp-App mit dem Generator-gulp-webapp Yeoman-Generator generiert . Es handhabte das "saubere Rätsel" auf diese Weise (übersetzt in die ursprünglichen Aufgaben, die in der Frage erwähnt wurden):
quelle
gulp.start()
, erklärt diese Antwort von gulp membergulp.start is undocumented on purpose because it can lead to complicated build files and we don't want people using it
coffee
Aufgabe abgeschlossen ist? Wenn ich es nichtdevelop
coffee
run-sequence
Quellcode erhalten :gulp.on('task_stop')
. Siehe meine erweiterte Antwort für Details: stackoverflow.com/a/38818657/3027390Run-Sequence ist der klarste Weg (zumindest bis Gulp 4.0 veröffentlicht wird)
Mit run-sequence sieht Ihre Aufgabe folgendermaßen aus:
Aber wenn Sie (aus irgendeinem Grund) es vorziehen, es nicht zu verwenden,
gulp.start
hilft die Methode :Hinweis: Wenn Sie die Aufgabe nur starten, ohne auf das Ergebnis zu hören, wird die
develop
Aufgabe früher als beendetcoffee
, was verwirrend sein kann.Sie können den Ereignis-Listener auch entfernen, wenn er nicht benötigt wird
Bedenken Sie, dass es auch ein
task_err
Ereignis gibt, das Sie möglicherweise anhören möchten.task_stop
wird bei erfolgreichem Abschluss ausgelöst undtask_err
erscheint, wenn ein Fehler vorliegt.Sie fragen sich vielleicht auch, warum es keine offizielle Dokumentation für gibt
gulp.start()
. Diese Antwort von gulp member erklärt die Dinge:(Quelle: https://github.com/gulpjs/gulp/issues/426#issuecomment-41208007 )
quelle
Laut den Gulp-Dokumenten:
So führen Sie Ihre Aufgabenfolge synchron aus:
gulp.src
) an zurückgulp.task
, um die Aufgabe darüber zu informieren, wann der Strom endet.gulp.task
.Siehe den überarbeiteten Code:
quelle
Ich hatte genau das gleiche Problem und die Lösung erwies sich für mich als ziemlich einfach. Ändern Sie Ihren Code grundsätzlich wie folgt und es sollte funktionieren. HINWEIS: Die Rückkehr vor gulp.src hat für mich den Unterschied ausgemacht.
quelle
probierte alle vorgeschlagenen Lösungen aus, alle scheinen ihre eigenen Probleme zu haben.
Wenn Sie sich tatsächlich die Orchestrator-Quelle ansehen, insbesondere die
.start()
Implementierung, werden Sie feststellen, dass der letzte Parameter, wenn er eine Funktion ist, als Rückruf behandelt wird.Ich habe diesen Ausschnitt für meine eigenen Aufgaben geschrieben:
quelle
Ich habe eine Weile nach dieser Antwort gesucht. Jetzt habe ich es in der offiziellen Schluckdokumentation bekommen.
Wenn Sie eine Schluckaufgabe ausführen möchten, wenn die letzte abgeschlossen ist, müssen Sie einen Stream zurückgeben:
quelle
Einfach
coffee
abhängig machen vonclean
unddevelop
abhängig voncoffee
:Der Versand erfolgt jetzt seriell:
clean
→coffee
→develop
. Beachten Sie, dassclean
die Implementierung undcoffee
die Implementierung einen Rückruf akzeptieren müssen , "damit die Engine weiß, wann dies geschehen wird" :Im Folgenden finden Sie ein einfaches Schluckmuster für eine synchrone,
clean
gefolgt von asynchronen Build-Abhängigkeiten :Gulp ist intelligent genug, um
clean
genau einmal pro ausgeführt zu werdenbuild
, unabhängig davon, von wie vielenbuild
Abhängigkeiten dies abhängtclean
. Wie oben beschrieben,clean
handelt es sich um eine Synchronisationsbarriere. Anschließend werden allebuild
Abhängigkeiten parallel ausgeführt und anschließend ausgeführtbuild
.quelle
Für mich wurde die Minify-Task nach der Verkettung nicht ausgeführt, da sie verkettete Eingaben erwartet und einige Male nicht generiert wurde.
Ich habe versucht, eine Standardaufgabe in der Ausführungsreihenfolge hinzuzufügen, aber es hat nicht funktioniert. Es funktionierte, nachdem nur ein
return
für jede Aufgabe hinzugefügt und die Minimierunggulp.start()
wie unten beschrieben ausgeführt wurde.Quelle http://schickling.me/synchronous-tasks-gulp/
quelle
Gulp und Node verwenden Versprechen .
So können Sie Folgendes tun:
Wenn Sie den Gulp-Stream zurückgeben, können Sie mit dieser
then()
Methode einen Rückruf hinzufügen. Alternativ können Sie Node's Native verwendenPromise
, um Ihre eigenen Versprechen zu erstellen. Hier habe ichPromise.all()
einen Rückruf, der ausgelöst wird, wenn alle Versprechen gelöst sind.quelle
Versuchen Sie diesen Hack :-) Gulp v3.x Hack für Async-Fehler
Ich habe alle "offiziellen" Methoden in der Readme-Datei ausprobiert. Sie haben bei mir nicht funktioniert, aber das hat funktioniert. Sie können auch auf gulp 4.x upgraden, aber ich empfehle Ihnen dringend, dies nicht zu tun, da es so viel kaputt macht. Sie könnten ein echtes js-Versprechen gebrauchen, aber hey, das ist schnell, schmutzig, einfach :-) Im Wesentlichen verwenden Sie:
Schauen Sie sich den Beitrag an!
quelle