Gulp 个任务 - 运行 个无依赖性的顺序

Gulp tasks - Run in sequence without dependencies

我有一个全局任务,必须 运行 按顺序(同步)一些子任务。我使用任务的依赖机制来处理 "synchronous" 逻辑:

// main task
gulp.task('deploy', ['build', 'upload', 'extract', 'migrate'], function() {
    // task returns a stream 
});

// sub tasks
gulp.task('migrate', ['extract'], function() {
    // task returns a stream
});

gulp.task('extract', ['upload'], function() {
    // task returns a stream
});

gulp.task('upload', ['build'], function() {
    // task returns a stream
});

gulp.task('build', [], function() {
    // task returns a stream
});

依赖关系运行良好,运行 全部按顺序进行。 但是现在,不执行extract>upload>build怎么能调用migrate呢? 因为,有时我会想手动调用 :

gulp build
gulp upload
gulp extract

而且我不希望每个任务都重新运行所有依赖项...

谢谢

最后,run-sequence 插件确实做得很好:

var runner = require('run-sequence');

// main task
gulp.task('deploy', [], function() {
    runner(
        'build',
        'upload',
        'extract',
        'migrate'
    );
});

// sub tasks
gulp.task('migrate', ['extract'], function() {
    // task returns a stream
});

gulp.task('extract', ['upload'], function() {
    // task returns a stream
});

gulp.task('upload', ['build'], function() {
    // task returns a stream
});

gulp.task('build', ['clean:build'], function() {
    // task returns a stream
});

gulp.task('clean:build', [], function() {
    // task returns a stream
});

这样我就可以独立调用任何子任务而无需重新执行之前的子任务...

我所做的是定义我想要隔离的每个任务的 (2) 个版本,但让它们调用相同的逻辑,所以我不再重复自己。

例如,在我当前的项目中,我有一个 e2e-tests-development 任务依赖于 build-development,它在 运行 宁 e2e 测试之前同时构建服务器和客户端。有时我只想重新运行 测试而不是重新构建整个应用程序。

我的 e2e-tests-development.js 文件大致如下所示:

var gulp = require('gulp');
// Omitted...

gulp.task('e2e-tests-development',
    ['build-development'],
    _task);

gulp.task('e2e-tests-development-isolated',
    [], // no dependencies for the isolated version of the task.
    _task);

function _task() {
    // Omitted...
}

显然,如果您只想 运行 该任务,您会使用 e2e-tests-development-isolated 而不是 e2e-tests-development 来调用 gulp

(当然 gulp 真正需要的是来自命令行的 --no-depedencies 标志...)

如果您像我一样需要 2 版本方法,可以使用以下解决方案:

gulp.task('deploy:build', ['build'], function () {
    gulp.start('deploy');
}

现在我可以在不依赖构建的情况下调用部署。