我有一个必须按顺序(同步)运行某些子任务的全局任务。我使用任务的依赖关系机制来处理“同步”逻辑:
// 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
我不希望每个任务都重新运行所有依赖项......
由于
答案 0 :(得分:1)
我所做的是定义(2)我想要隔离的每个任务的版本,但让他们调用相同的逻辑,这样我就不会重复自己。
例如,在我当前的项目中,我有MKMapRectWorld
任务依赖于boundingMapRec
,它在运行e2e测试之前构建服务器和客户端。有时我只是想重新运行测试而不是重新构建整个应用程序。
我的e2e-tests-development
文件看起来大致如下:
build-development
显然,如果您想要执行该任务,则可以使用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...
}
调用gulp
。
(当然e2e-tests-development-isolated
真正需要的是来自命令行的e2e-tests-development
标志......)
答案 1 :(得分:0)
最后,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 :(得分:0)
如果你需要像我这样的2版本方法,以下解决方案将会:
gulp.task('deploy:build', ['build'], function () {
gulp.start('deploy');
}
现在我可以在不依赖构建的情况下调用deploy。