2016-12-18 3 views
0

Kürzlich aufgerufen Ich habe begonnen letzte Ausführung zweimal. Es tut, aber jedes Mal, wenn ich die Aufgabe ausführen, wird der Zeitstempel nur definiert, nachdem die done()-Funktion aufgerufen wird. Der Ausgang ist ähnlich:gulp.lastrun erst nach dem getan einen Wert zurückgibt() Funktion

[12:00:25] Using gulpfile c:\xampp\htdocs\gulp\gulpfile.js 
[12:00:25] Starting 'example'... 
[12:00:25] Starting '<anonymous>'... 
undefined 
[12:00:25] Finished '<anonymous>' after 2.14 ms 
[12:00:25] Finished 'example' after 4.39 ms 
1482058825484 

Also das erste Mal, dass ich die lastRun Zeitstempel zu bekommen versuchen es ist nicht definiert und das zweite Mal gibt es einen Zeitstempel für den aktuellen Lauf (weil done() bereits genannt wurde). Wie bekomme ich den letzten Zeitstempel?

Edited:

Ich habe dieses Beispiel Aufgabe nur, wie lastRun Werke zu bestimmen. Eine "real-life" Aufgabe wäre so etwas wie dieses:

gulp.task('scripts', 
    gulp.series(function scriptsInternal() { 
     return gulp.src('src/scripts/**/*.js', {since: gulp.lastRun('scripts')}) 
      .pipe(cached('ugly')) 
      .pipe(uglify()) 
      .pipe(remember('ugly')) 
      .pipe(concat('main.min.js')) 
      .pipe(gulp.dest('dist/scripts')); 
     }) 
); 

In diesem Fall lastRun('scripts') auch undefined zurückgibt. Zumindest nehme ich an, weil die Aufgabe 2 Sekunden dauert, ob ich die Option since verwende oder nicht. Here ist eine weitere Beispielaufgabe, die funktionieren sollte, aber geht das?

+0

Das ist das erwartete Verhalten. Wenn Sie die Dokumente lesen, sehen Sie, dass 'lastRun()' nicht die letzte Ausführung einer Aufgabe zurückgibt, sondern die letzte ** erfolgreiche ** Ausführung. Ein Lauf ist nicht erfolgreich, wenn 'done()' nicht aufgerufen wurde. Ihre einzige Möglichkeit ist, den Zeitstempel selbst in der ersten Zeile Ihrer Aufgabe aufzuzeichnen und sich nicht auf 'lastRun()' zu verlassen. –

+0

@SvenSchoenung Danke, dass du dir die Zeit genommen hast zu antworten. Ich habe meine Frage bearbeitet. Ich verstehe immer noch nicht, wie ich 'lastRun' verwenden soll, um nur mit Dateien zu arbeiten, die seit der letzten Ausführung der Aufgabe geändert wurden. – wolo

Antwort

1

Ich beantworte meine eigene Frage noch einmal.

Der Anruf lastRun() funktioniert nicht so, wie ich es erwartet habe, weil es nur dann einen korrekten Zeitstempel zurückgibt, wenn der Schluck läuft. Wenn Sie eine Aufgabe manuell mit folgendem Befehl ausführen:

Befehl, wird der Schluck gestartet, aber bald beendet (bei Beendigung der Aufgabe). Auf diese Weise wird der lastRun Zeitstempel nicht "erinnert". Jedes Mal, wenn Sie eine Aufgabe ausführen, wird ein weiterer Prozess gestartet.

Für lastRun um richtig zu funktionieren, benötigen Sie einen Beobachter. Der Watcher wird im Hintergrund ausgeführt und löst den Task example aus, wenn eine Datei von einem Glob geändert wird. Da der Beobachter nicht bei der Beendigung der Aufgabe stoppt, wird Schluck den letzten Zeitstempel merken.

Verwandte Themen