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

joe*_*yfb 2 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;
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

  return stream;
};
Run Code Online (Sandbox Code Playgroud)

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

版本

  • 吞咽3.9
  • 浏览器化 9

Sve*_*ung 5

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

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

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

dests.map(function(d) {
  stream = stream.pipe(gulp.dest(d));
});
Run Code Online (Sandbox Code Playgroud)