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
标志…)