微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想启动一个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'));
});

//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: ''
    }
  }
};

//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();
  });
};

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

解决方法

您可以使用 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);
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐