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');
}
现在我可以在不依赖构建的情况下调用部署。
我有一个全局任务,必须 运行 按顺序(同步)一些子任务。我使用任务的依赖机制来处理 "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');
}
现在我可以在不依赖构建的情况下调用部署。