Gulp 手表只运行一次

Gulp watch runs only once

我正在尝试完成我的 gulpfile.js,但我 运行 遇到了 "gulp watch" 的问题。当我将观察者设置为 运行 时,它会检测到更改和 运行 分配的任务,但只有一次。文件的下一个更改不再触发任务。我不知道为什么,但我的观察者只工作了一次。

我相信观察者没有意识到它触发的任务已经完成。或者,也许它可以处理延迟加载或我正在使用的 运行-sequence 插件...

var
  gulp = require('gulp'),
  plugins = require('gulp-load-plugins')({
    DEBUG: true
  });
plugins.runSequence = require('run-sequence');

gulp.task('watch',function(){
  gulp.watch('public/**/*.+(css|js)',['buildEspecifico']);
});

gulp.task('buildEspecifico',function(callback){
  return plugins.runSequence(
    ['deletarMainMin'],
    ['agruparJS','agruparCSS']
  );
});

'deletarMainMin'、'agruparJS'、'agruparCSS' 是同一个 gulpfile 中定义的其他任务。

提前致谢!

干杯,

法比奥.

I believe the watcher is not realizing the tasks it triggered are finished.

是的,就是这样。在您的 buildEspecifico 任务中,您接受 callback。这意味着 gulp 不会认为您的 buildEspecifico 任务已经完成,除非您调用 callback.

由于您不调用 callbackbuildEspecifico 任务一旦运行就永远不会真正完成。并且因为您的 buildEspecifico 任务在技术上仍然 运行 gulp 不会在文件更改时再次启动任务。

解决方法是将callback传递给runSequence。当序列中的所有任务都完成时,它将调用 callback

gulp.task('buildEspecifico',function(callback){
  return plugins.runSequence(
    ['deletarMainMin'],
    ['agruparJS','agruparCSS'],
    callback
  );
});

或者你也可以完全忽略回调:

gulp.task('buildEspecifico',function(){
  return plugins.runSequence(
    ['deletarMainMin'],
    ['agruparJS','agruparCSS']
  );
});

显然,您必须确保任务 deletarMainMinagruparJSagruparCSS 本身完成,因此也可以在这些任务中调用或省略 callback .