javascript - Gulp.JS,一个源到多个动态目的地

标签 javascript node.js gulp

我正在处理一个 JavaScript 源文件,我希望将其存放在两个或多个目标文件夹中。如果我链接管道,则可以通过管道传输到多个目标,但如果一次将其添加到流中则不行。这使我无法动态设置目标文件夹的数量。

例如执行以下工作

var rebundle = function() {
  var stream = bundler.bundle();
  stream = stream.pipe(source("bundled.js"));

  stream.pipe(gulp.dest(dests[0]))
        .pipe(gulp.dest(dests[1]))
        .pipe(gulp.dest(dests[2]));

  return stream;
};

但是以下的工作不一致。有时某个文件夹无法输出,有时可以输出但缺少一些内容。

var rebundle = function() {
  var stream = bundler.bundle();
  stream = stream.pipe(source("bundled.js"));

  dests.map(function(d) {
    stream.pipe(gulp.dest(d));
  });

  return stream;
};

简而言之,是否有一种方法可以对其进行修改,以在从一个文件中的一个源文件夹开始时允许动态数量的目标?

版本

  • gulp 3.9
  • 浏览9

最佳答案

每次调用stream.pipe()都会返回一个新流。您必须将 .pipe() 的每个后续调用应用于之前返回的流。

当您执行 stream = stream.pipe(source("bundled.js")) 时,您的做法是正确的,但随后在您的 dest.map() 中> 回调,您只是将一个又一个管道添加到同一流中。这意味着您正在创建大量新流,但这些流永远不会从您的任务中返回,因此 gulp 不会等待它们完成。

您必须每次存储返回的流,以便在下一次迭代中使用它:

dests.map(function(d) {
  stream = stream.pipe(gulp.dest(d));
});

关于javascript - Gulp.JS,一个源到多个动态目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41643132/

相关文章:

javascript - 有没有办法在 Tomcat 服务器中运行 Node.js 应用程序?

javascript - 使用 Browersync 自动重新加载 css

javascript - 如何使用javascript实现上传图像功能而不重复图像

javascript - 使用 javascript/jquery 读取输入字段的值并自动分配 var 类型

node.js - 在 Node.JS 上使用请求模块发布数据

javascript - 延迟 gulp-watch 执行

javascript - Gulp.js 以特定顺序阻塞运行任务

javascript - JavaScript 函数速度太快

javascript - 将左侧面板动态附加到所有页面

css - 如何使用 -O2 选项优化 Less 代码