Gulp Watch只运行一次

问题描述 投票:24回答:4

我正在使用这个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');
    }));
});

当我在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

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

gulp gulp-watch
4个回答
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');
    });
});

(并添加'完成'回调到build让Gulp知道你什么时候完成)。

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

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

9
投票

对我而言,它正在为任务增加一个“回归”:

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

6
投票

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

我改变了这个:

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

对此:

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

1
投票

这个问题让我为一个周末疯狂。我尝试了所有:

  • 添加done() - 事件
  • 重命名/触摸/清除目标CSS
  • 更具体的文件路径

但是(这个问题的原因和解决方案)很容易让我觉得可悲:

只是update your nodejs installation,我的是0.12.x!难怪这不起作用。

之后,观看事件再次起作用。有时它也会再次出错。但在这种情况下,只需再次保存您的文件,它就会被识别。 (我认为foundation/gulp watch检查更改为快速,而您的文件被新上传的文件替换)

© www.soinside.com 2019 - 2024. All rights reserved.