问题描述
如何理解这句话:Are your tasks running before the dependencies are complete? Make sure your dependency tasks are correctly using the async run hints: take in a callback or return a promise or event stream.
gulpjs中文网的翻译:你的任务是否在这些前置依赖的任务完成之前运行了?请一定要确保你所依赖的任务列表中的任务都使用了正确的异步执行方式:使用一个 callback,或者返回一个 promise 或 stream。
我有些摸不着头脑。如果没有使用callback或者返回promise/stream,那这个任务就不是异步任务了?
还有gulp.task(’mytask’,[’beforemytask’]),表示beforemytask执行完了再去执行mytask,有点同步的味道,但是beforemytask需要使用正确的异步方式?
懵B,求大神解惑
问题解答
回答1:如果没有使用callback或者返回promise/stream,那这个任务就不是异步任务了?
是的。gulp 任务序列执行依赖 Orchestrator,会对函数有无参数(callback)和返回值(promise/stream)做判断,从而决定是不是异步。
但是beforemytask需要使用正确的异步方式?
需要检测 beforemytask 结束,确保 mytask 在后面执行就用上面的方式,否则任何方式都可以。
回答2:你不知道这个任务什么时候跑完,后面加一个回调处理,单就这一个任务而言,所以这里的处理是异步的,同步确实像你所说的一样,一个任务必须等另外一个任务执行完才能处理,有时候任务之间有依赖关系,
必须按照依赖关系处理,这里用同步去理解,我觉得没有问题,这是我的一点理解,仅供参考
下面举个例子
var gulp = require(’gulp’); var minifycss = require(’gulp-minify-css’); //压缩cssvar uglify = require(’gulp-uglify’); //压缩jsvar del = require(’del’); // 删除目录gulp.task(’clean’,function() { return del([’dist/**’]);});//压缩 css gulp.task(’minify-css’,[’clean’], function() { return gulp.src(’./public/**/*.css’) .pipe(minifycss()) .pipe(gulp.dest(’./dist’));});//压缩 js gulp.task(’minify-js’,[’clean’], function() { return gulp.src(’./public/**/*.js’) .pipe(uglify()) .pipe(gulp.dest(’./dist’));});// 每一次跑任务 需要删除 dist 目录, 然后开始跑 minify-css 和 minify-js //执行任务 这里 minify-css 和 minify-js 就依赖前面 clean // 也就是说必须等 clean 这个任务跑完,minify-css 和 minify-js 才能执行// // default 是默认执行的任务gulp.task(’default’,[ ’clean’,’minify-css’,’minify-js’]);