Gulp任务 – 依次运行

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

// 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 }); 

依赖关系运行良好,并依次运行。 但现在,我怎样才能调用migrate而不执行extract>upload>build 。 因为,有时我会想要手动调用:

 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 ,在运行e2etesting之前,构build服务器和客户端。 有时我只想重新运行testing,而不是重新构build整个应用程序。

我的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

(当然,真正需要的是一个来自命令行的--no-depedencies标志…)