gulp 任務(wù)同步異步的思考

js構(gòu)建的時(shí)候,經(jīng)常出現(xiàn)需要處理異步同步的,比如js:release等任務(wù)需要等待clean任務(wù)完成才可以;
很容易想到使用 gulp.task的第二個(gè)數(shù)組參數(shù);

但如果第二個(gè)參數(shù)的數(shù)組需要都等待clean完成呢?也就是js:release,css:release,html:release這些任務(wù)都需要先等待clean完成才能去并行運(yùn)行,這個(gè)時(shí)候下面的例子就給出了方案
看官網(wǎng)的例子: https://github.com/gulpjs/gulp/blob/master/docs/API.md

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']);

其中 gulp.task('default', ['one', 'two']);gulp.task('default', ['two']);是一樣的了。
關(guān)鍵點(diǎn)是理解,task如果返回滿足是callback,promise,stream三種情況,則一定要等待第二個(gè)參數(shù)的數(shù)據(jù)的任務(wù)執(zhí)行完,才會(huì)執(zhí)行當(dāng)前的任務(wù)(經(jīng)測試,如果有多個(gè)任務(wù)都依賴同一個(gè)任務(wù),這同一個(gè)任務(wù)只會(huì)執(zhí)行一次)。
這樣就有下面的方案:

gulp.task('clean',function(){
  ... //需要滿足三個(gè)條件之一
});
gulp.task('js:release',['clean'],function(){});
gulp.task('css:release',['clean'],function(){});
gulp.task('html:release',['clean'],function(){});
gulp.task('default',['js:release','css:release','html:release'],function(){})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容