簡體   English   中英

在async.series輔助函數中觸發shell命令時,如何使Gulp任務依次觸發?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM