【问题标题】:Gulp Bundle + Browserify on multiple filesGulp Bundle + Browserify 处理多个文件
【发布时间】:2016-10-26 23:55:31
【问题描述】:

所以我有一个简单的 gulp 任务函数,它当前将我的 main.jsx 转换为 main.js 文件:

gulp.task("bundle", function () {
    return browserify({
        entries: "./app/main.jsx",
        debug: true
    }).transform(reactify)
        .bundle()
        .pipe(source("main.js"))
        .pipe(gulp.dest("app/dist"))
});

我想知道是否可以在这个 gulp.task 中放置多个包? 我的理想结果是能够做到:

  • main.jsx 到 main.js

  • otherPage.jsx 到 otherPage.js

  • otherPage2.jsx 到 otherPage2.js

一站式完成任务。

我在网上搜索过,但似乎找不到任何相关信息,感谢任何帮助或建议,提前谢谢。

【问题讨论】:

  • 你为什么不想把它们放在一个包里?
  • 我不介意我是怎么做的,我只是想能够同时处理多个文件。 @cartant

标签: javascript reactjs gulp browserify jsx


【解决方案1】:

如果你想为每个文件创建一个包,你需要循环遍历各个文件,为每个文件创建一个流,然后合并流(使用merge-stream):

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

gulp.task("bundle", function () {
  var files = [ "main", "otherPage", "otherPage2" ];
  return merge(files.map(function(file) {
    return browserify({
        entries: "./app/" + file + ".jsx",
        debug: true
    }).transform(reactify)
        .bundle()
        .pipe(source(file + ".js"))
        .pipe(gulp.dest("app/dist"))
  }));
});

以上要求您手动维护一个文件列表作为数组。也可以编写一个任务,将所有.jsx 文件捆绑在app 目录中,而无需维护文件的显式数组。您只需要 glob 包来为您确定文件数组:

var merge = require('merge-stream');
var glob = require('glob');
var path = require('path');

gulp.task("bundle", function () {
  var files = glob.sync('./app/*.jsx');
  return merge(files.map(function(file) {
    return browserify({
        entries: file,
        debug: true
    }).transform(reactify)
        .bundle()
        .pipe(source(path.basename(file, '.jsx') + ".js"))
        .pipe(gulp.dest("app/dist"))
  }));
});

【讨论】:

  • 你能解释一下为什么我们需要merge吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 2014-03-09
  • 2015-10-02
相关资源
最近更新 更多