Gulp任务不是串行运行的

h b*_*bob 1 javascript node.js gulp

我正在关注官方文档,但我的gulp任务没有按顺序运行.

gulp.task("mytask", ["foo", "bar", "baz"]);

gulp.task("foo", function (callback) {
  gulp
    .src("...")
    .pipe(changed("..."))
    .pipe(gulp.dest(function (file) {
      // ...stuff
      return "...";
    }))
    .on("end", function() {
      // ...stuff
      callback();
    });
});

gulp.task("bar", function (callback) {
  //...
});

gulp.task("baz", function (callback) {
  //...
});
Run Code Online (Sandbox Code Playgroud)

但我的输出看起来像这样:

Starting 'mytask'...
Starting 'foo'...
Starting 'bar'...                   // <-- foo is not done yet!
Finished 'foo'
Finished 'bar'
Starting 'baz'...
Finished 'baz'
Finished 'mytask'
Run Code Online (Sandbox Code Playgroud)

如何让它们按顺序运行?

JMM*_*JMM 7

如果您希望它们以串行方式运行,您当前必须使用任务依赖系统,例如:

gulp.task("mytask", ["foo", "bar", "baz"]);

gulp.task("foo", function (callback) {
  //...
  callback(...);
});

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

gulp.task("baz", ['bar'], function (callback) {
  //...
  callback(...);
});
Run Code Online (Sandbox Code Playgroud)

它很笨重.我认为它将在未来版本中得到解决.

根据具体情况,您可以返回承诺或事件流,而不是传入并调用回调.

我想我应该提一下,run-sequence模块现在是一个选项.但是上面说明的任务依赖系统是gulp本身目前提供的机制.请参阅此评论 re:run-sequence以及gulp中任务排序的未来.