这个gulp命令会等待相关任务完成吗?

3

我有以下的gulp配置:

gulp.task('bar', function() {
    return gulp.src(files, { base: './' })
        .pipe(gulp.dest('dist'))
});


gulp.task('foo', ['bar'], function() {
    // do something...
});

foo在运行前会等待bar完成吗?


4
是的,它会。 - Satpal
1
它将等待运行,只需注意,如果指定了多个依赖项,则它们都将并行运行,并不一定按指定顺序执行。 - Mor Paz
2个回答

5
根据此处文档:
需要在你的任务运行之前执行并完成的任务数组。
因此,是的,在运行任务之前它将完成。
此外,请注意以下注释。如果您的任务正在触发后台任务并且未正确返回,则gulp可能会错误地认为您的任务已经完成。
注意:是否在依赖项完成之前运行了您的任务?确保您的依赖任务正确使用异步运行提示:使用回调,返回承诺或事件流。

2
除了评论和其他回答之外,我只想补充说明您需要返回一个、一个Promise或调用任务函数callback参数

Gulp使用Orchestrator来处理任务。

返回流(最常见的情况,类似于Promise)

gulp.task('somename', function(done) {
    return gulp.src(res)
      .pipe(minify())
      .pipe(gulp.dest('build'));
});

使用回调函数(当返回不是一个选项时)
gulp.task('somename', function(done) {

  // async function which does not return a stream like other gulp functions
  getFilesAsync(function(err, res) {
    // pass any errors to the callback
    if (err) return done(err);

    var stream = gulp.src(res)
      .pipe(minify())
      .pipe(gulp.dest('build'))
      .on('end', done); // use the callback when it's done
  });
});

如果你不执行其中之一,gulp 就不会知道任务何时完成,而会立即开始下一个任务。

你的第一个代码示例中,done 大概是多余的吧? - Ben Aston
我可以从我的任务中返回一个 Promise,然后 Gulp 就会“自动工作”吗? - Ben Aston
@BenAston,done回调函数的作用是表明它始终可用,即使你不使用它也是如此。是的,正如文档和其他答案中提到的那样,返回Promise将起作用。 - Emile Bergeron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接