【发布时间】:2014-12-03 04:52:45
【问题描述】:
好吧,我们使用 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 捆绑在一起。 debug 模块的内部依赖项设置为 undefined,这没问题。
如果您查看prelude.js 文件,就会发现其中的逻辑只是使用先前定义的全局require(存储在previousRequire 变量中)来查找当前包中未定义的模块。但是因为vendor.js 没有暴露任何类似debug 模块的东西,所以它不能成功。
我只能在更新日志中找到这一行:
散列消失了,所以要公开:进行多导出捆绑需要真实或显式公开 ID
我无法找到这实际上意味着什么:(
【问题讨论】:
标签: javascript browserify