我试图通过使用browserify-shim将某些模块从包中提取出来来重构使用Browserify的库。具体来说,该库使用require(“codemirror”),但我想提供一个不包含CodeMirror的软件包,而是使用通过CDN提供的软件包。用browserify-shim实现依赖关系的匀场依赖关系
所以我有browserify-垫片配置在我的package.json像
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror"
}
到目前为止好。 require('jquery')和require('codemirror')已从browserified bundle中消失,并被预期的代码片段取代,以从窗口对象中获取jQuery和CodeMirror。
该库还需要一些CodeMirror附加组件。例如require('codemirror/addon/hint/show-hint.js')。没关系。我希望将附加软件捆绑在一起。但是,在这个附加组件中是一个包含require(“../../ lib/codemirror”)的UMD包装器。由于这个(我认为),Browserify看到了这个并且绑定了来自/node_modules/codemirror/lib/codemirror.js的CodeMirror。我想这样使用代码镜像垫片中定义的window.CodeMirror,而不是找出它。已经尝试了许多变化,包括以下内容:
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror",
"../../lib/codemirror": "global:CodeMirror",
"codemirror/addon/hint/show-hint.js": {
"exports":null,
"depends":["../../lib/codemirror:CodeMirror"]
}
}
这需要( “../../ LIB/codemirror”)不会消失!我确定我错过了一些东西。
我从一个Gulp脚本运行这个,但我不认为这应该有所作为。 Browserify版本3.38.1。 Browserify-shim版本3.7.0。
任何想法?
看起来像browserify-shim可能是错误的方式去与此。 Browserify选项bundleExternal = false可能会解决问题。调查...... – 2014-10-09 12:06:46
bundleExternal = false并不是完整的答案,因为它留下了最初的“require”语句。因此,第一个示例中的browserify-shim仍然是需要的。但它有帮助。通过这个设置,我可以在绑定Gulp脚本以获取附加组件之前直接.require('codemirror/addon/hint/show-hint.js'),但CodeMirror的外部需求将会被忽略。 – 2014-10-13 14:57:00
在browserify的最新版本中看起来像是将{global:true}应用于browserify-shim转换,这会导致它在依赖项上运行!这允许我们成功地填充require('../../ lib/codemirror')。 – 2014-10-15 18:34:12