Gulp watch beendet oder erstellt die gesamte Task-Kette

9

Ich entwickle ein Typoskript-Projekt mit den folgenden Build-Schritten:

  • fusseln
  • build
  • testen

Ich verwende Gulp 4.0 als Build-Tool und möchte eine Überwachungsaufgabe haben, die den Test auslösen sollte (was bedeutet, dass Flusen- und Build-Aufgaben vorher ausgelöst werden). Wenn ein Fehler auftritt (z. B. ein Flusenfehler), wird die Überwachungsaufgabe derzeit beendet.

Dieses Problem ist bekannt und leicht zu lösen. Die typische Lösung ist a) um Fehler zu vermeiden oder b) das Verhalten der Pipe zu korrigieren.

a) Für den gulp-tslint könnte ich diese Konfiguration von ihrer Homepage aus verwenden:

%Vor%

Aber wenn ich das emitError -Flag einfüge, werden die Fusselfehler protokolliert und alle folgenden Schluckaufgaben werden ausgeführt (Build, Test).

b) Ich könnte auch gulp-plumber verwenden oder manuell Fehler abfangen (siehe hier ), aber das Verhalten ist das Für alle diese bekannten Lösungen werden die folgenden Schluckaufgaben ausgeführt (Build, Test).

Was ich möchte ist, dass die Task-Kette nach einem Fehler stoppt (kein Build und Test nach einem Flusenfehler), aber die Watch-Task sollte niemals aufhören. Wie könnte ich das lösen? Die Watcher-Aufgaben sehen so aus:

%Vor%

Sie finden die komplette gulpfile.js hier .

    
ChrLipp 03.06.2016, 06:09
quelle

1 Antwort

2

Der Grund für das Stoppen Ihrer Uhr ist, dass ein err -Objekt in der Callback-Kette weitergegeben wird. Sie müssen verhindern, dass err den letzten gulp.watch() Callback erreicht.

Sie können das tun, indem Sie den von gulp.watch() bereitgestellten Callback umbrechen und niemals das Objekt err an den ursprünglichen Callback übergeben:

%Vor%

Beachten Sie, dass gulp.series('lint', 'build', 'test') die Aufgaben nicht wirklich ausführt. Es gibt nur eine neue Funktion zurück, die einen Rückruf akzeptiert. Nur wenn diese neue Funktion als gulp.series('lint', 'build', 'test')() aufgerufen wird, werden die tatsächlich ausgeführten Aufgaben ausgeführt.

Ich habe auch die ignoreInitial -Option hinzugefügt, so dass die Überwachung nach dem Start einmal ausgeführt wird, was zu sein scheint, was du mit gulp.series('test', ...) in deiner watch Aufgabe erreichen willst.

(Abgesehen davon, dass gulpfile.js angesehen wird, ist nutzlos. Änderungen an Ihrer gulp-Datei werden erst wirksam, wenn Sie gulp watch erneut ausführen. Es gibt keinen Weg dazu.)

Schließlich müssen Sie Ihre anderen Aufgaben entkoppeln, damit sie keine expliziten Abhängigkeiten zu anderen Aufgaben haben. Es ist verlockend, eine Schluck 3.x-Aufgabe wie folgt zu übersetzen:

%Vor%

In eine Schluck 4.x Aufgabe wie folgt:

%Vor%

Sie sehen auf der Oberfläche ähnlich aus, aber unter der Haube sind sie ganz anders. Weitere Informationen zu diesem Thema finden Sie in diesem Artikel .

Eine gute Strategie besteht darin, Ihre Aufgaben in zwei Kategorien zu gliedern:

  1. Eigenständige Aufgaben , die eine Sache tun und nicht von anderen Aufgaben abhängig sind.
  2. Zusammengesetzte Aufgaben , die mehrere andere Aufgaben in Serie oder parallel ausführen.

Nach diesem Prinzip können Ihre anderen Aufgaben in diesem Bereich neu strukturiert werden:

%Vor%     
Sven Schoenung 08.06.2016, 16:40
quelle

Tags und Links