2017-04-21 108 views
2

我有以下一飲而盡配置:這個gulp命令是否會等待依賴任務?

gulp.task('bar', function() { 
    return gulp.src(files, { base: './' }) 
     .pipe(gulp.dest('dist')) 
}); 


gulp.task('foo', ['bar'], function() { 
    // do something... 
}); 

foo等待bar完成,然後再運行?

+4

__是的,它會 – Satpal

+1

它會在運行前等待,只要注意,如果你指定了多個依賴項,它們將全部並行運行,並不一定按照指定的順序執行 –

回答

4

按照文檔here

要執行並完成之前,你的任務將運行任務的數組。

所以是的,它會在它運行任務之前完成。

此外,請注意以下說明。如果您的任務正在觸發後臺任務,並且沒有正確返回,則gulp可能會錯誤地認爲您的任務已完成。

注意:您的任務是否在依賴關係完成之前運行?確保您的依賴任務正確使用異步運行提示:接受回調或返回承諾或事件流。

1

除了評論和其他答案,我只想補充一點,你需要返回一個stream,一個承諾,或致電task function callback parameter

Gulp使用Orchestrator執行任務。

返回一個流(最常見的情況,並承諾類似)

gulp.task('somename', function(done) { 
    return gulp.src(res) 
     .pipe(minify()) 
     .pipe(gulp.dest('build')); 
}); 

使用回調(返回時,是不是一種選擇)

gulp.task('somename', function(done) { 

    // async function which does not return a stream like other gulp functions 
    getFilesAsync(function(err, res) { 
    // pass any errors to the callback 
    if (err) return done(err); 

    var stream = gulp.src(res) 
     .pipe(minify()) 
     .pipe(gulp.dest('build')) 
     .on('end', done); // use the callback when it's done 
    }); 
}); 

如果你不這樣做的一個這些咕嘟咕嘟不會知道任務何時完成,並會立即開始下一個任務。

+0

假設'done'在你的第一個代碼示例? – Ben

+0

我可以從我的任務中返回一個承諾,並且gulp會「正常工作」嗎? – Ben

+0

@BenAston'done'回調函數表明即使你不使用它,它總是可用的。是的,正如文檔和其他答案中提到的那樣,返回Promise將起作用。 –