build不能等clean任务执行完毕后,再来执行build么?
gulp.task('rebuild', ['clean', 'build']);
clean还没执行完毕,就进入build任务了, 这个时候clean过程的rm操作会报错,因为build过程的文件还在生成(生成进程占用文件,因此即使第一个clean任务也会因为删除失败而报错)
好吧。。
rm使用同步方法试试
我用了 gulp-sequence
来保证按顺序执行。
clean是异步的吧,你需要手动在任务函数加个callback,这样才能保证异步任务也按照顺序执行。
@airyland 通过gulp-run 调用的系统命令 cd dist & rm * -rf
@airyland rebuild报错,下面的代码怎么加callback?
run = require(‘gulp-run’)
gulp.task(‘clean’, function(){ run(‘cd dist & rm * -rf’).exec(); });
gulp.task(‘build’, function(){ console.info(‘build sext’); gulp.src([‘static/jquery/jquery.js’], app/*.js).pipe(gulp.dest(’./dist’)); });
gulp.task(‘rebuild’, [‘clean’, ‘build’]);
run = require(‘gulp-run’), seq=require(‘gulp-sequence’)
gulp.task('clean’, function(){ run(‘cd dist & rm * -rf’).exec(); });
gulp.task('build’, function(){ console.info(‘build sext’); gulp.src([‘static/jquery/jquery.js’], app/*.js).pipe(gulp.dest(‘./dist’)); });
gulp.task('rebuild’, seq('clean’, ‘build’)); 还是不能保证顺序执行啊, clean和build任务该如何修改?
@airyland 问题好像解决了,但是代码一点美感都没有, 要这么多层嵌套:( @think2011 下面代码有优雅点的写法么?
gulp.task('rebuild', function() {
exec('gulp clean', function(err) {
if (err) {
console.error(err, 'clean');
return;
} else {
exec('gulp build', function(err) {
if (err) {
console.error(err, 'build');
} else {
exec('gulp release', function(err) {
if (err) {
console.error(err, 'release');
}
});
}
});
}
});
});
gulp-sequence 详情ngFast
从你的依赖关系中,clean和build本身就是异步的。建议使用runSequence来保证任务的同步,同时可以让多个任务独立。
var runSequence = require(‘run-sequence’); gulp.task(‘task1’, function(){}); gulp.task(‘task2’, function(){}); gulp.task(‘task3’, function(){}); gulp.task(‘default’, function(){ runSequence( [‘task1’, ‘task2’], //task1和task2异步 task3 //task3同步,等1和2执行完。 ); });
@hstarorg gulp这么多插件啊? 只知道有gulp-sequence,怎么又冒出runSequence, 你都怎么知道这些插件的?
@soliury 可以不写gulpfile.js ,直接写gulpfile.coffee么? 貌似可以少敲很多字:)
@chapgaga 话说你也不是按照我说的用callback来解决吧。。
@chapgaga 可以,但是你要安装coffee-script,不用引用,安装就可以。
gulp.task('rebuild’, [ ‘build’],function(){ return … }); gulp.task('build’, ['clean’],function(){ return … });
试试lazypipe?
@chapgaga 这些插件就靠平时看一些文章,另外node社区的很多库都可以被gulp使用的。
@chapgaga 可以写一个简化版本的gulpfile.js
require('coffee-script/register');
retuire('./gulpfile.coffee');