Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 吞咽不连续运行的任务_Javascript_Node.js_Gulp - Fatal编程技术网

Javascript 吞咽不连续运行的任务

Javascript 吞咽不连续运行的任务,javascript,node.js,gulp,Javascript,Node.js,Gulp,我在遵循官方文件,但我的吞咽任务不是连续运行的 gulp.task("mytask", ["foo", "bar", "baz"]); gulp.task("foo", function (callback) { gulp .src("...") .pipe(changed("...")) .pipe(gulp.dest(function (file) { // ...stuff return "..."; })) .on("

我在遵循官方文件,但我的吞咽任务不是连续运行的

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) {
  //...
});
但我的输出如下所示:

Starting 'mytask'...
Starting 'foo'...
Starting 'bar'...                   // <-- foo is not done yet!
Finished 'foo'
Finished 'bar'
Starting 'baz'...
Finished 'baz'
Finished 'mytask'
正在启动“我的任务”。。。
正在启动“foo”。。。

正在启动“bar”…// 如果希望它们串联运行,则当前必须使用任务依赖系统,例如:

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(...);
});
它很笨重。我认为这将在未来的版本中得到解决

视情况而定,您可以不传入并调用回调


我想我应该提到的是,模块现在是一个选项。但是上面演示的任务依赖系统是gulp本身目前提供的机制。请参阅gulp中的re:run sequence和任务排序的未来。

应更新此答案,以反映gulp 4在一系列中运行任务的方式

如果希望Gulp任务以系列方式运行,则应使用Gulp.series来运行它们,如果希望它们以并行方式运行Gulp.parallel

在使用Gulp系列时,您可以执行以下操作:

gulp.task("mytask", gulp.series(foo, bar, baz));
这些其他任务可能不再是任务,而是常量,比如

  const foo = () => {
     return gulp.src("...")
     .pipe(changed("..."))
     .pipe(gulp.dest(function (file) {
      // ...stuff
      return "...";
    }));
  }
因此,该系列列出的是常量而不是一些字符串。在迁移到gulp4时,可能会出现其他问题,但是像这样一个简单的Gulp文件的修复很容易


关于大口喝4的简单教程

你不需要。如果要执行串行任务,请使用
grunt
gulp
的全部要点是并行任务(和流)。@Mathletics你完全错了。Gulp允许同步和异步。两者都有实现的方法。这个“重复”答案的可能重复并非如此。我的问题假设父任务的语法处理排序。显然不是。您需要明确重申所有相关任务的顺序,如下所示。现在已经足够在家长身上声明了。哇,这真有效。。。你说得对,它很笨重。您是否有记录这一点的参考?事件流选项似乎对我也不起作用,但您的方式起作用。您是否可以使用事件流选项取决于您在任务中所做的工作。在你的
foo
任务中,
/..stuff
确实发生了什么事情吗?文档非常混乱,但是请参阅我最后一段中的链接,并向下滚动到“所以这个示例看起来像这样:”。您可能还想看一看。@Mathletics最大化并发性非常好……这并不意味着您永远不需要事情串联发生。我相信gulp项目已经决定在未来的版本中促进这一点。参见和。@hbob错误的类比。你说的是过程;我说的是工具。在你的类比中,你想用一壶开水来做煎蛋,但那是煮硬蛋的工具。(这也让我印象深刻,如果你是gulp中同步操作的专家,你会问一个比“我如何在gulp中进行同步操作”更有趣的问题。)有一个用于同步操作的工具;它被称为Grunt,非常适合这个用例。