GULP自動化項目構建之–正確的異步執行方式(RETURN)

2017年2月23日我的博客文章--遷移到segmentfault
在作項目中,不經意間代碼會寫成這個樣子。html

gulp.task('clean',function(){
    gulp.src(['./dist','./rev'])
        .pipe(clean())
});
gulp.task("build",["clean"],function(){
    runSequence("htmlMove",['imageMin','reCollector','btMove','views'],'over')
})

那麼這就可能會致使一個問題,由於這個task:clean不是一個正確的異步執行方式,因此他就會出現–顯示clean任務已經finished接着他會執行htmMove、imageMin等等一系列任務,可是.pipe(clean())卻還在執行,這就形成了邊刪除目錄邊執行其餘的一系列任務,最終會由於找不到指一些指定目錄會報錯。gulp

那麼什麼是正確的異步執行呢?segmentfault

API文檔給出了詳細解釋,這裏不作詳細介紹。http://www.gulpjs.com.cn/docs...api

其中最重要的一點着重提出:promise

正確的異步執行方式:使用一個 callback,或者返回一個 promise 或 stream。異步

若是你想要建立一個序列化的 task 隊列,並以特定的順序執行,你須要作兩件事:ui

給出一個提示,來告知 task 何時執行完畢,
而且再給出一個提示,來告知一個 task 依賴另外一個 task 的完成。
那麼針對剛纔的gulp流有如下改進:code

gulp.task('clean',function(){
    return gulp.src(['./dist','./rev'])
        .pipe(clean())
});
gulp.task("build",["clean"],function(){
    runSequence("htmlMove",['imageMin','reCollector','btMove','views'],'over')
})

加上return,不加return的話,task和裏面的gulp流是異步執行的,因此就會出現先finished在編譯的狀況。htm

相關文章
相關標籤/搜索