[英]How do I get Gulp tasks to fire sequentially when firing shell commands in an async.series helper function?
我有多個Gulp任務,它們向shell發送一系列命令。 第二項任務取決於第一項任務。 在執行第二個任務之前,如何確保在第一個任務中發送給async.series的所有命令均已完成。
gulp.task('task1', function(cb) {
process.chdir(__dirname);
process.chdir('path');
var cmdArray = getCmdsForTask1();
runSeries(cmdArray, 'Task 1');
return cb();
});
gulp.task('task2',['task1'], function() {
process.chdir(__dirname);
process.chdir('task2_path');
var cmd2 = getCmdForTask2();
runSeries([cmd2], 'Task 2');
});
var runSeries = function(cmdArray, taskName) {
async.series(cmdArray, function(err, results) {
results.forEach( function(result) {
gutil.log(gutil.colors.cyan(taskName + ' complete:') + gutil.colors.white(result) );
});
});
};
非常感謝!
您使用async.series在正確的軌道上。 缺少的一件事是你完成后沒有告訴原始任務。
gulp.task('task1', function(cb) {
process.chdir(__dirname);
process.chdir('path');
var cmdArray = getCmdsForTask1();
runSeries(cmdArray, 'Task 1', cb);
});
gulp.task('task2',['task1'], function(cb) {
process.chdir(__dirname);
process.chdir('task2_path');
var cmd2 = getCmdForTask2();
runSeries([cmd2], 'Task 2', cb);
});
var runSeries = function(cmdArray, taskName, cb) {
async.series(cmdArray, function(err, results) {
results.forEach( function(result) {
gutil.log(gutil.colors.cyan(taskName + ' complete:') + gutil.colors.white(result) );
});
cb(err);
});
};
注意我如何接受每個任務的回調,並在async.series完成時調用它。
您可以使用名為run-sequence的節點插件,而不是使用[]語法讓任務相互依賴。
gulp.task('build', function(callback) {
runSequence('build-clean',
['build-scripts', 'build-styles'],
'build-html',
callback);
});
這個例子意味着並行運行'build-scripts'和'build-styles'但是在它們都完成之前不運行'build-html'
我相信你要找的是瀑布功能。 它將運行第一個任務,然后將結果發送到第二個任務,依此類推。 從文檔:
瀑布(任務,[回調])
依次運行任務的函數數組,每個函數將其結果傳遞給數組中的下一個。 但是,如果任何任務將錯誤傳遞給它們自己的回調,則不執行下一個函數,並立即調用主回調並顯示錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.