2016-10-04 116 views
1

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

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

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

在此先感谢!

干杯,

法比奥。

回答

2

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

是的,就是这样。在您的buildEspecifico任务中,您接受callback。这意味着gulp不会考虑你的buildEspecifico任务完成,除非你调用callback

由于您不调用callbackbuildEspecifico任务一旦运行就不会实际完成。而且因为你的技术上仍然在运行,所以当文件改变时,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也在这些任务中。

+0

Hello @Sven!非常感谢您的帮助。我无法删除该回调,因为需要按顺序正确运行任务。我会尝试将回调添加到序列并查看会发生什么。将在几分钟内更新线程。 – FTM

+0

嘿@Sven,它没有解决。发生了什么事情是,在我做出改变后,任务开始无限循环运行。就好像观察者多次调用“buildEspecifico”。 – FTM

+0

当我尝试删除回调时发生了同样的情况。观察者不停地呼叫任务。 – FTM