2015-02-11 108 views
11

我在gulpFile以下任務,有人在我的團隊人創建:設置一個咕嘟咕嘟任務是默認

gulp.task('serve', [], function(){ 
    gulp.run(
    'fonts', 
    'browsersync', 
    'watch' 
); 
}); 

我想息事寧人,但我也想映射此任務的默認任務。所以,我想:

gulp.task('default',['serve']); 

它似乎工作,在服務器運行,但由於某種原因,「監視」任務還沒有發生的事情,我不上的變化讓瀏覽器刷新。

這一切都按計劃運行,如果我運行「吞噬服務」而不是「吞嚥」。我做錯了什麼?

編輯: 這裏的手錶任務:

gulp.task('watch', ['styles', 'browsersync'], function() { //'default' 
    gulp.watch(
    [ 
     './app/assets/sass/**/*.scss', 
     './app/modules/**/*.scss' 
    ], ['styles']); 

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

}); 
+0

您的手錶任務是什麼樣的? – Seth 2015-02-11 14:12:32

+0

已添加到原始問題中。抱歉。 – Steve 2015-02-11 15:11:01

回答

13

嘗試運行它裏面serve的更新您的默認任務包括在數組參數表任務來代替。像這樣:

gulp.task('default', ['serve', 'watch']); 

如果檢出咕嘟咕嘟文檔上asynchronous task support,特別是最後一個例子,你會看到,你可以要求相關的任務來完成指定的任務應該開始之前。

var gulp = require('gulp'); 

// takes in a callback so the engine knows when it'll be done 
gulp.task('one', function(cb) { 
    // do stuff -- async or otherwise 
    cb(err); // if err is not null and not undefined, the run will stop, and note that it failed 
}); 

// identifies a dependent task must be complete before this one begins 
gulp.task('two', ['one'], function() { 
    // task 'one' is done now 
}); 

gulp.task('default', ['one', 'two']); 
6

gulp.rungulp.start被認爲是不好的做法:

https://github.com/gulpjs/gulp/issues/426
https://github.com/gulpjs/gulp/issues/505

遺憾的是,答案在這裏似乎是你的同事可能沒有真正理解咕嘟咕嘟。如果不更改代碼,您可能無法解決此問題。

沒有更多的上下文,就像整個gulp文件一樣,我無法重現您的確切問題。不過,我的直覺是,它與Gulp異步/連續執行任務的方式有關。可能是您的'默認'任務過早退出,因爲gulp.run不會同步執行。不管怎樣,Gulp對什麼時候需要等待什麼任務感到困惑。您正在使用兩種完全不同的工具來管理您的運行順序。

相反的gulp.run,你的「服務」任務應該真正使用的依賴於運行其他任務:

gulp.task('serve', ['fonts', 'browsersync', 'watch']); 
gulp.task('default', ['serve']); 

而且,值得指出的是您的手錶任務已經上市的「browsersync」作爲一個依賴。雖然技術上不正確(Gulp會第二次忽略它),但它可能導致過度複雜化和混亂,因此可能不是一個好主意。如果「手錶」取決於「browsersync」,你可以從「服務」刪除「browsersync」依賴性:

gulp.task('watch', ['styles', 'browsersync'], function() { 
    gulp.watch([ 
    './app/assets/sass/**/*.scss', 
    './app/modules/**/*.scss' 
    ], ['styles']); 

    gulp.watch([ 
    './app/**/*.js', 
    './app/**/*.html' 
    ], function() { 
    reload(); 
    }); 
}); 
gulp.task('serve', ['fonts', 'watch']); 
gulp.task('default', ['serve']); 

這應該得到你正在尋找的結果。


所有這一切是說,如果你真的堅持走壞習慣,你可以嘗試在你的「默認」任務使用gulp.run

gulp.task('default', function() { 
    gulp.run('serve'); 
}); 

我懷疑你的主要問題是,你是混合使用陣列任務依賴關係和gulp.run,但是無論如何,gulp.run是「做錯了」。

+0

您可能還想看看關於如何確保異步任務系列執行的Gulp文檔: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async -task支持 – 2015-02-11 18:00:39