2017-11-27 5 views
3

Wie Menschen, die zu Gulp 4 migriert haben, möglicherweise wissen, gulp.series - wie es sollte - wird nicht mit der Ausführung fortfahren, wenn eine Aufgabe in der Serie nicht ordnungsgemäß Abschluss signalisiert.Gulp 4: Wie erkennt man "Haben Sie vergessen, asynchrone Vervollständigung zu signalisieren?" Fehler in einem komplexen Build-Skript

Mein Problem damit ist die Art, wie es diese Art von Fehler behandelt - es ist einfach eine Nachricht in der Konsole (Haben Sie vergessen, asynchrone Beendigung zu signalisieren?); gulp wird immer noch mit einem Fehlercode von 0 beendet. Das bedeutet, wenn Sie in einem komplizierteren Build-Skript gulp ausführen, sieht das Skript so aus, als ob alles in Ordnung wäre und Schluck-Tasks erfolgreich abgeschlossen werden, wenn sie dies eindeutig nicht tun. (Im Gegensatz dazu, wenn Sie einen Fehler mit gulpUtil.plugin error werfen, führt es zu einem 0-Fehlercode.)

Also meine Frage ist: wie würden Sie "von außen" erkennen, dass solcher Fehler passiert ist?

  • Gibt es eine Möglichkeit, Schluck mit einem Nicht-0 in diesem Fall zu beenden? (Gibt es ein Ereignis, das ich abonnieren kann und einen Fehler oder eine konfiguriere, die ich einstellen kann etc.)
  • Sollte ich nur versuchen zu überprüfen, ob die Assets, die generiert werden sollten, existieren? (Ich finde diese Lösung sehr zerbrechlich.)
  • Sollte ich die Konsolenmeldungen "beobachten" und nach bestimmten Zeichenfolgen suchen wie "Hast du vergessen zu signalisieren ..."? (Ugh!)
  • (Ja, ich weiß, ich könnte alles mit einem Schluck machen und dann würde ich nicht den Fehlercode überprüfen müssen, aber lassen Sie uns einfach davon ausgehen, dass ich in Wirklichkeit nicht kann.)

Gibt es eine andere Möglichkeit, an die ich nicht gedacht habe?

Antwort

0

Sie können den Prozess mit dem Stream/Promise/Callback signalisieren. Sobald die Handbewegung beendet ist, können Sie mit dem Vorgang fortfahren.

var print = require('gulp-print'); 

gulp.task('message', function() { 
    return gulp.src('package.json') 
    .pipe(print(function() { return 'HTTP Server Started'; })); 
}); 

gulp.task('message', function() { 
    return new Promise(function(resolve, reject) { 
    console.log("HTTP Server Started"); 
    resolve(); 
    }); 
}); 

gulp.task('message', function(done) { 
    console.log("HTTP Server Started"); 
    done(); 
}); 

Verwenden Sie andernfalls Rückrufe auf diese Weise.

function syncTasks(callback1) 
{ 
    return gulp.series(firstTask, secondTask, (callback2) => 
    { 
     callback1(); 
     callback2(); 
    })();  
} 
+0

Danke für die ausführliche Antwort! Allerdings beantwortet das meine Frage nicht wirklich :) Ich weiß, wie die asynchrone Vervollständigung in Schluck 4 funktioniert und wie sich die Aufgaben * verhalten sollten *. Was ich brauche, ist eine Möglichkeit, außerhalb des Schluckens zu erkennen, ob der Prozess wegen einer Fehlverhaltensaufgabe angehalten wurde. Wenn eine Aufgabe einen Fehler auslöst, wird Schluck mit einem Fehlercode ungleich 0 beendet - das ist einfach zu handhaben! Der asynchrone Beendigungsfehler führt jedoch dazu, dass gulp mit 0 beendet wird, was die Erkennung und Handhabung erschwert. Offensichtlich ist dieser Fehler am besten _avoided_ wenn möglich - mit den Methoden, die Sie erwähnen - aber Dinge können immer noch schiefgehen, und ich möchte damit umgehen. –

Verwandte Themen