CNode

gulp任务依赖执行报错,怎么办?

问答
Cchapgaga发布于11 年前最后回复11 年前21 回复7885 浏览0 收藏

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

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

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

查看回复

回复 (21)

J
jerrywu55#1·11 年前

好吧。。

I
i5ting#2·11 年前

rm使用同步方法试试

T
think2011#3·11 年前

我用了 gulp-sequence 来保证按顺序执行。

A
airyland#4·11 年前

clean是异步的吧,你需要手动在任务函数加个callback,这样才能保证异步任务也按照顺序执行。

C
chapgaga#6·11 年前
引用 airylandclean是异步的吧,你需要手动在任务函数加个callback,这样才能保证异步任务也按照顺序执行。

@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']);

C
chapgaga#7·11 年前
引用 think2011我用了 gulp sequence 来保证按顺序执行。

@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任务该如何修改?

C
chapgaga#9·11 年前
引用 airyland@chapgaga 看文档: https://github.com/gulpjs/gulp/blob/master/docs/API.md accept a callback

@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');
            }
          });
        }
      });
    }
  });
});
S
soliury#10·11 年前

gulp-sequence 详情ngFast

H
hstarorg#11·11 年前

从你的依赖关系中,clean和build本身就是异步的。建议使用runSequence来保证任务的同步,同时可以让多个任务独立。

H
hstarorg#12·11 年前

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执行完。 ); });

C
chapgaga#13·11 年前
引用 hstarorg从你的依赖关系中,clean和build本身就是异步的。建议使用runSequence来保证任务的同步,同时可以让多个任务独立。

@hstarorg gulp这么多插件啊? 只知道有gulp-sequence,怎么又冒出runSequence, 你都怎么知道这些插件的?

C
chapgaga#14·11 年前
引用 soliurygulp sequence 详情ngFast

@soliury 可以不写gulpfile.js ,直接写gulpfile.coffee么? 貌似可以少敲很多字:)

S
soliury#16·11 年前
引用 chapgaga@soliury 可以不写gulpfile.js ,直接写gulpfile.coffee么? 貌似可以少敲很多字:)

@chapgaga 可以,但是你要安装coffee-script,不用引用,安装就可以。

M
myqianlan#17·11 年前

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

C
chapgaga#18·11 年前
引用 myqianlangulp.task('rebuild’, [ ‘build’],function(){ return .... }); gulp.task('build’, ['clean’],functio...

@myqianlan

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

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

S
shuson#19·11 年前

试试lazypipe?

H
hstarorg#20·11 年前
引用 chapgaga@hstarorg gulp这么多插件啊? 只知道有gulp sequence,怎么又冒出runSequence, 你都怎么知道这些插件的?

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

H
hstarorg#21·11 年前
引用 chapgaga@soliury 可以不写gulpfile.js ,直接写gulpfile.coffee么? 貌似可以少敲很多字:)

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

require('coffee-script/register');
retuire('./gulpfile.coffee');
参与回复
登录后即可参与回复。登录