gulp.js - 如何将多个流返回主流?

Chr*_*ery 7 stream node.js gulp

我想启动一个gulp.src流,将其传递给一个创建一堆新流的函数,然后将其结果传递给gulp.dest.下面是我到目前为止所做的,但它显然不起作用,因为我正在将流回流到gulp.dest哪个爆炸,因为它期待一个文件,而不是一个流.所以我的问题是:如何正确地将n流的数量返回到gulp的原始流,以便它们可以适当地继续沿着管道向下移动?

//gulpfile.js
var gulp = require('gulp'),
  bundle = require('./lib/bundle.js');

gulp.task('bundle', function() {
  return gulp.src('./bundle.config.js')
    .pipe(bundle())
    .pipe(gulp.dest('./public'));
});
Run Code Online (Sandbox Code Playgroud)

-

//bundle.config.js
module.exports = {
  bundle: {
    main: {
      js: [
        './content/js/foo.js',
        './content/js/baz.js'
      ],
      css: [
        './content/**/*.css'
      ],
      resources: './content/**/*.{png,svg}'
    },
    other: {
      js: './content/js/other.js',
      css: '',
      resources: ''
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

-

//bundle.js
var gulp = require('gulp'),
  through = require('through2'),
  concat = require('gulp-concat');

module.exports = function () {
  return through.obj(function (file, enc, cb) {
    var config;
    try {
      config = require(file.path); // get config file
    } catch (e) {
      this.emit('error', e);
      return cb();
    }
    var streams = [];
    for (var key in config.bundle) {
      var bundle = config.bundle[key];

      streams.push(
        gulp.src(bundle.js, {base: '.'})
          .pipe(concat(key + '.js'))
      );

      streams.push(
        gulp.src(bundle.css, {base: '.'})
          .pipe(concat(key + '.css'))
      );

      streams.push(
        gulp.src(bundle.resources, {base: '.'})
        //.pipe(something())
      );

    }
    for (var i = 0; i < streams.length; i++) {
      // This causes an error in `gulp.dest` because we're returning the stream, not the file.
      // Instead, how do I resolve each of the individual streams and push the results back to the main stream??
      this.push(streams[i]);
    }
    cb();
  });
};
Run Code Online (Sandbox Code Playgroud)

你可以看到这个代码,你可以在这个repo上分叉和玩:https://github.com/chmontgomery/gulp-streams-to-stream

Kon*_*kus 11

您可以使用merge-stream连接

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

gulp.task('bundle', function () {

  var paths = [
    { src: 'src/admin/**', dest: './build/admin' },
    { src: 'src/public/**', dest: './build' }
  ];

  var tasks = paths.map(function (path) {
    return gulp.src(path.src).pipe(gulp.dest(path.dest));
  }

  return merge(tasks);
};
Run Code Online (Sandbox Code Playgroud)