2015-03-25 10 views
18

Ich benutze diese Gulp Uhr Beispiel: https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events.Gulp Watch nur einmal laufen

var gulp = require('gulp'); 
var watch = require('gulp-watch'); 
var batch = require('gulp-batch'); 

gulp.task('build', function() { console.log('Working!'); }); 

gulp.task('watch', function() { 
    watch('**/*.js', batch(function() { 
     gulp.start('build'); 
    })); 
}); 

Wenn ich es auf meinem Windows 8 Maschine ausführen, wird es nur das erste Mal, dass ich eine Datei zu ändern:

C:\test>gulp watch 
[08:40:21] Using gulpfile C:\test\gulpfile.js 
[08:40:21] Starting 'watch'... 
[08:40:21] Finished 'watch' after 2.69 ms 
[08:40:31] Starting 'build'... 
Working! 
[08:40:31] Finished 'build' after 261 µs 

Das nächste Mal passiert nichts. Warum?

+0

Haben Sie eine Datei geändert? Weil du beim Ausführen von gulp watch die Dateien anschaust. Wenn Sie dann eine Datei ändern, wird die Funktion in der Uhr ausgelöst. – blablabla

+1

Ja, vielleicht bin ich nicht klar genug. Ich ändere Dateien, aber "Watch" wird nur ausgeführt, wenn ich zum ersten Mal eine Datei ändere. Z.B.Wenn ich 'gulp watch' starte, ändere etwas in meiner * .js Datei und speichere es, die Uhr läuft. Wenn ich dann etwas anderes in der gleichen Datei ändere und es erneut speichere, läuft die Überwachung nicht. Der Prozess "Schluckuhr" läuft noch, aber nichts passiert. – dhrm

+0

Wenn Sie immer noch die 'gulp-batch' verwenden wollen, ist die richtige Verwendung, einen' done' Callback zu haben: 'done' - ist ein Callback für Ihr Funktionssignal an Batch, dass Sie fertig sind. Also: 'gulp.task ('watch', function() { ansehen ('**/*. Js', Batch (Funktion (Ereignisse, erledigt)) { gulp.start ('build'); \t \t getan(); });) }); ' – nemesv

Antwort

13

Wenn Sie die Dokumentation genau lesen, sehen Sie den folgenden Satz:

Sie schlicht Rückruf passieren kann, dass auf jedem Event oder wickeln Sie es in großen Schluck-Batch, um sie auszuführen aufgerufen wird einmal

Also, das ist im Grunde der Deal mit gulp-batch. Um es ständig zu beobachten, entfernen Sie einfach den Batch-Aufruf:

gulp.task('build', function (done) { 
    console.log('Working!'); 
    done(); 
}); 

gulp.task('watch', function() { 
    watch('app/*.js', function() { 
     gulp.start('build'); 
    }); 
}); 

(und fügen Sie den ‚done‘ Rückruf build zu lassen Gulp wissen, wenn Sie fertig sind).

Btw ... Ich bin nicht sicher, aber ich denke, gulp-watch gemeint ist, nicht nur Dateien betrachten, sondern auch direkt ein Vinyl-Objekt zurück. Also eigentlich mit dem eingebauten in gulp.watch sollte die gleiche Wirkung hat:

gulp.task('watch', function() { 
    gulp.watch('app/**/*.js', ['build']); 
}); 
+0

Alter Beitrag aber lemme noch etwas zitiert von dem, was @ddprrt sagte, ' "(und fügen Sie den 'fertig' Callback zu bauen, um Gulp wissen zu lassen, wenn Sie fertig sind) . '' Und das hat mich fast stundenlang an den Kopf geschlagen. Danke mann – Temitayo

3

Ich hatte das gleiche Problem und verwenden die gleichen wie ddprrt. Der Unterschied bestand in der Verwendung des Verzeichnis-Platzhalters im Gegensatz zum absoluten Pfad.

ich änderte sich dies:

gulp.task('watch', function() { 
    gulp.watch('sass/shortcutcss/*.scss', ['sass']) 
}); 

dazu:

gulp.task('watch', function() { 
    gulp.watch('sass/**/*.scss', ['sass']) 
}); 
+1

Gleiches Problem und gleiche Lösung hier. Vielleicht ein Thema auf GitHub über das wäre eine gute Idee. –

+1

Ich hatte das gleiche Problem und löste das Hinzufügen des Platzhalterverzeichnisses /**/*.scss, jetzt funktioniert es –

0

Dieses Problem hat mich für ein Wochenende verrückt. Ich habe versucht, alle:

  • Add getan() - Ereignis
  • Umbenennen/Touch/Klares Ziel CSS
  • genauer sein mit den Dateipfaden

Aber der (Grund für dieses Problem und) Die Lösung war so einfach, dass ich mich danach erbärmlich fühlte:

Nur update your nodejs installation, meine war 0.12.x! Kein Wunder, dass das nicht geklappt hat.

Danach funktioniert das Überwachungsereignis erneut. Manchmal geht es auch wieder schief. Aber in diesem Fall speichern Sie Ihre Datei ein zweites Mal und es wird erkannt. (Ich denke, foundation/gulp watch prüft auf Änderungen zu schnell und während Ihre Datei mit dem neuen hochgeladenen ersetzt wird)