1

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

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

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 中定义的其他任务。

提前致谢!

干杯,

法比奥。

4

1 回答 1

2

我相信观察者没有意识到它触发的任务已经完成。

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

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

解决方案是传递callbackrunSequence. callback当序列中的所有任务完成时,它将调用。

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

或者,您也可以完全省略回调:

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

显然,您必须确保任务deletarMainMin, agruparJS,agruparCSS本身完成,因此也可以调用或省略callback这些任务。

于 2016-10-05T06:23:04.630 回答