js构建的时候,经常出现需要处理异步同步的,比如js:release等任务需要等待clean任务完成才可以;
很容易想到使用 gulp.task的第二个数组参数;
但如果第二个参数的数组需要都等待clean完成呢?也就是js:release,css:release,html:release这些任务都需要先等待clean完成才能去并行运行,这个时候下面的例子就给出了方案
看官网的例子: https://github.com/gulpjs/gulp/blob/master/docs/API.md
var gulp = require('gulp');
// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
// do stuff -- async or otherwise
cb(err); // if err is not null and not undefined, the run will stop, and note that it failed
});
// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
// task 'one' is done now
});
gulp.task('default', ['one', 'two']);
其中 gulp.task('default', ['one', 'two']);
和gulp.task('default', ['two']);
是一样的了。
关键点是理解,task如果返回满足是callback,promise,stream三种情况,则一定要等待第二个参数的数据的任务执行完,才会执行当前的任务(经测试,如果有多个任务都依赖同一个任务,这同一个任务只会执行一次)。
这样就有下面的方案:
gulp.task('clean',function(){
... //需要满足三个条件之一
});
gulp.task('js:release',['clean'],function(){});
gulp.task('css:release',['clean'],function(){});
gulp.task('html:release',['clean'],function(){});
gulp.task('default',['js:release','css:release','html:release'],function(){})