Gulp.JS,动态数量目的地的一个来源

时间:2017-01-13 20:44:07

标签: 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
  • browserify 9

1 个答案:

答案 0 :(得分:4)

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

当您执行stream = stream.pipe(source("bundled.js"))时,您正确地执行了此操作,但是在您的dest.map()回调中,您只需将一个接一个的管道添加到同一个流中。这意味着你要创建大量的新流,但那些永远不会从你的任务中返回,所以gulp并没有等待它们完成。

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

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