【发布时间】:2015-04-16 16:10:16
【问题描述】:
根据browserify-shim 文档,您可以通过在package.json 中使用以下语法来指定browserify-shim 需要从旧模块中公开哪些全局变量:
{
"browserify-shim": {
"legacyModule": "myVar"
}
}
我希望通过require('legacyModule') 和window.myVar 访问旧模块。
根据我的经验,如果我尝试填充的非commonjs 模块使用window.myVar = x 或仅使用myVar = x,则该模块将在全球范围内公开,并且可以通过require() 按预期使用。
然而,当旧模块使用var myVar = x 时,这就是导致问题的原因,因为该模块只能通过require('legacyModule') 访问,而不能通过window.myVar 访问。
browserify-shim documentation 声明:
此外,它还处理以下现实世界的边缘情况:
- 仅在脚本级别声明
var foo = ...并假定它附加到window对象的模块。因为它们唯一的运行方式是在全局环境中运行——“咳咳,……不?!”
【问题讨论】:
-
您是否将那些遗留模块与 browserify 捆绑在一起?如果没有,它们是如何合并到您的页面中的?
-
是的,它们与 Browserify 捆绑在一起。
-
您到底希望做什么?:A) 可以在您的浏览器模块中使用
require('legacyModule'),或者B) 也可以访问window.myVar? -
也希望访问 window.myVar 以便大量遗留代码继续按预期工作。
-
对。感谢您的反馈。我真的很感谢你和我一起解决这个问题。我同意你的观点,browserify-shim 并不打算这样做。我的同事@EvanDull 和我(以及我猜的许多其他人)对此感到困惑了一段时间,因为根据文档的编写方式,browserify-shim 似乎确实可以完成暴露全局变量的工作我们的遗留代码依赖。如果您想根据我们都发现的内容编辑您的答案,我会将其标记为已解决,并可能在 browserify-shim 文档上提交拉取请求,或者更好的是,提交功能请求。
标签: javascript node.js browserify browserify-shim