Gulp Watch只运行一次

dhr*_*hrm 24 gulp gulp-watch

我正在使用这个Gulp Watch示例:https://github.com/floatdrop/gulp-watch/blob/master/docs/readme.md#starting-tasks-on-events.

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');
    }));
});
Run Code Online (Sandbox Code Playgroud)

当我在Windows 8机器上运行它时,它仅在我第一次更改文件时运行:

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
Run Code Online (Sandbox Code Playgroud)

下次什么都没发生.为什么?

ddp*_*rrt 17

如果您仔细阅读文档,则会看到以下短语:

您可以传递普通回调,它将在每个事件上调用,或者在gulp-batch中包装它以运行一次

所以,这基本上是与之相关的gulp-batch.要经常观看,只需删除批量调用:

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

gulp.task('watch', function () {
    watch('app/*.js', function () {
        gulp.start('build');
    });
});
Run Code Online (Sandbox Code Playgroud)

(并添加'完成'回调build以让Gulp知道你何时完成).

顺便说一句......我不确定,但我认为gulp-watch不仅要看文件,还要直接返回乙烯基物体.所以实际使用内置gulp.watch应该具有相同的效果:

gulp.task('watch', function () {
    gulp.watch('app/**/*.js', ['build']);
});
Run Code Online (Sandbox Code Playgroud)

  • 旧帖子,但让我再次引用 @ddprrt 所说的内容,“(并在构建中添加‘完成’回调,让 Gulp 知道你何时完成)。”这几乎让我把头撞到墙上了小时。谢啦 (2认同)

小智 9

对我来说,这是为任务添加“返回”:

gulp.task('styles', function(){
 return gulp.src('css/styles.css')
    .pipe(autoprefixer())
    .pipe(gulp.dest('build'));
});
Run Code Online (Sandbox Code Playgroud)


lac*_*der 6

我有同样的问题,并使用相同的ddprrt.区别在于使用目录通配符作为绝对路径.

我改变了这个:

 gulp.task('watch', function() {
   gulp.watch('sass/shortcutcss/*.scss', ['sass'])
 });
Run Code Online (Sandbox Code Playgroud)

对此:

 gulp.task('watch', function() {
   gulp.watch('sass/**/*.scss', ['sass'])
 });
Run Code Online (Sandbox Code Playgroud)