如何以编程方式将因子捆绑与 browserify 一起使用?

Posted

技术标签:

【中文标题】如何以编程方式将因子捆绑与 browserify 一起使用?【英文标题】:How can I use factor-bundle with browserify programmatically? 【发布时间】:2014-04-09 02:47:38 【问题描述】:

我想使用 factor-bundle 来查找我的 browserify 入口点的常见依赖项并将它们保存到单个公共包中:

https://www.npmjs.org/package/factor-bundle

factor-bundle 文档使它看起来很容易在命令行上执行,但我想以编程方式执行它并且我正在努力解决它。

我当前的脚本是这样的(我也在使用 reactify 来转换 react 的 jsx 文件):

var browserify = require('browserify');
var factor = require('factor-bundle')
var glob = require('glob');

glob('static/js/'/**/*.js,jsx', function (err, files)      
  var bundle = browserify(
    debug: true
  );

  files.forEach(function(f) 
    bundle.add('./' + f);
  );
  bundle.transform(require('reactify'));

  // factor-bundle code goes here?

  var dest = fs.createWriteStream('./static/js/build/common.js');
  var stream = bundle.bundle().pipe(dest);
);

我正在尝试弄清楚如何使用因子捆绑作为插件,并为每个输入文件指定所需的输出文件(即files 中的每个条目)

【问题讨论】:

你可以使用 bundle.plugin(factor, opts) 吗? 理论上是可以的,但是我不知道怎么用,即选项应该是什么 是的,我目前也在努力解决这个问题。 【参考方案1】:

这个答案已经很晚了,所以你可能已经找到了解决这个问题的方法或解决方法。我正在回答这个问题,因为它与my question 非常相似。

我可以通过将 factor-bundle 用作 browserify 插件来完成这项工作。我没有测试你的具体代码,但模式应该是一样的:

var fs = require('fs'),
    browserify = require('browserify'),
    factor = require('factor-bundle');

var bundle = browserify(
    entries: ['x.js', 'y.js', 'z.js'],
    debug: true
);

// Group common dependencies
// -o outputs the entry files without the common dependencies
bundle.plugin('factor-bundle', 
    o: ['./static/js/build/x.js', 
        './static/js/build/y.js', 
        './static/js/build/z.js']
);

// Create Write Stream
var dest = fs.createWriteStream('./static/js/build/common.js');

// Bundle
var stream = bundle.bundle().pipe(dest);

factor-bundle 插件采用输出选项o,需要与入口文件具有相同的索引。

不幸的是,在这之后我还没有想出如何对这些文件做任何其他事情,因为我似乎无法访问 factor-bundle 的流事件。因此,对于缩小等,可能还需要通过 browserify 插件来完成。

【讨论】:

【参考方案2】:

我创建了grunt-reactify 以允许您拥有 JSX 文件的捆绑文件,以便更轻松地使用模块化 React 组件。 您所要做的就是指定一个父目标文件夹和源文件:

grunt.initConfig(
  reactify: 
      'tmp': 'test/**/*.jsx'
  ,
)

【讨论】:

以上是关于如何以编程方式将因子捆绑与 browserify 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单独的 browserify 供应商捆绑包中包含 node_modules

将 Browserify 与 Reactjs 一起使用

如何将文档注入 systemjs-builder 以捆绑 Angular 4.0.0 应用程序?

将 browserify 与 npm jQuery 和非 npm 插件一起使用

以编程方式获取捆绑标识符

如何使用 browserify 和 gulp 输出多个包