gulp任务依赖执行报错,怎么办?
发布于 10 年前 作者 chapgaga 6926 次浏览 最后一次编辑是 8 年前 来自 问答

build不能等clean任务执行完毕后,再来执行build么?

gulp.task('rebuild', ['clean', 'build']);

clean还没执行完毕,就进入build任务了, 这个时候clean过程的rm操作会报错,因为build过程的文件还在生成(生成进程占用文件,因此即使第一个clean任务也会因为删除失败而报错)

21 回复

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’]);

@think2011

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 … });

@myqianlan

gulp.task('build’, ['clean’],function(){ return … });

要报错的, clean还没执行完毕,就开始build了…

试试lazypipe?

@chapgaga 这些插件就靠平时看一些文章,另外node社区的很多库都可以被gulp使用的。

@chapgaga 可以写一个简化版本的gulpfile.js

require('coffee-script/register');
retuire('./gulpfile.coffee');
回到顶部