如何将gulp管道推到另一个管道上

时间:2016-09-08 13:25:55

标签: gulp

我想通过构建管道处理一系列文件夹。对于每个文件夹,我启动另一个gulp管道,它将创建一些源文件。最后,我想通过zip()插件将它们全部组合在一起,以生成最终的工件。 以下伪代码显示了我的方法。但是,我无法将gulp.src的结果推送到当前管道。

return gulp.src(someFolder)
           .pipe(through(function(folder, enc, cb){
               // how to add the result of the following line to my 
               // own pipeline????
               this.push(gulp.src(path.join(folder, "whatever"))
                             .pipe(somePlugin()));

            }))
            .pipe(zip(....))
            .pipe(gulp.dest(....));

有关如何将这些管道组合在一起的任何提示吗?

1 个答案:

答案 0 :(得分:1)

这正是gulp-foreach的目的。使用它相当于您发布的代码将如下所示:

var foreach = require('gulp-foreach');

return gulp.src(someFolder)
  .pipe(foreach(function(stream, folder) {
     return gulp.src(path.join(folder.path, "whatever"))
       .pipe(somePlugin());
 }))
 .pipe(zip(....))
 .pipe(gulp.dest(....));

请注意,上述内容将丢弃原始gulp.src(someFolder)中的所有文件。它们不会包含在ZIP中。如果你想保留周围的那些,你可以使用merge-stream

var foreach = require('gulp-foreach');
var merge = require('merge-stream');

return gulp.src(someFolder)
  .pipe(foreach(function(stream, folder) {
     return merge(stream,
       gulp.src(path.join(folder.path, "whatever"))
         .pipe(somePlugin()));
 }))
 .pipe(zip(....))
 .pipe(gulp.dest(....));