2016-10-04 86 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