如何使用最新的Browserify(6.x.x)创建供应商捆绑包?

时间:2014-10-08 13:41:20

标签: javascript browserify

好吧,我们已经使用Browserify 2.x一段时间了。我们正在进行一些重构,所以我们想尝试更新到最新的Browserify,以减少版本的未来飞跃。

不幸的是,外部捆绑包的处理方式发生了变化。在旧版本中,我们可以简单地告诉Browserify哪些模块不在捆绑中,而是从另一个模块中需要它们 - 基本上是described here

从5.0.0版本开始,Browserify内部发生了一些重大变化。让我们以此命令为例。 debug模块是NPM模块。

browserify -r debug -o vendor.js

在Browserify @ 4中运行此命令,输出文件如下所示:

require=(function... {
    "debug":[function(require,module,exports){
        module.exports=require('2Bvkwp');
    },{}],
    "2Bvkwp":[function(require,module,exports){
        // actual code from debug module
    },{}]
});

现在使用Browserify @ 5,它看起来像这样:

require=(function... {
    1:[function(require,module,exports){
        // actual code from debug module
    },{}]
});

为了完成等式,我有一个包含require('debug')的简单文件,它与命令browserify -x debug -e index.js -o main.js捆绑在一起。 undefined模块的内部依赖关系设置为debug,这是正常的。

如果你看一下prelude.js文件,就会有一些逻辑只使用先前定义的全局require(存储在previousRequire变量中)来查找当前包中未定义的模块。但由于vendor.js没有公开debug模块之类的内容,因此无法成功。

我能找到的就是更改日志中的这一行:

  

散列已经消失,因此暴露:执行多导出包

需要真实或显式公开ID

我无法找到实际意味着什么:(

1 个答案:

答案 0 :(得分:3)

您应该能够像这样创建供应商包:

browserify -r debug > vendor.js

然后像这样创建你的应用程序包:

browserify index.js -x debug > main.js

这很好用(我正在使用browserify@6.1.0)。

基本上,即使require('debug');在浏览器控制台中不起作用,只要捆绑包以正确的顺序加载,browserify就可以在供应商捆绑包中找到debug模块,即:< / p>

<script src="vendor.js"></script>
<script src="main.js"></script>

它不必将依赖项暴露给外部代码,只需暴露给其他browserify包。