2014-09-24 179 views
6

我试图通过使用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。

任何想法?

+0

看起来像browserify-shim可能是错误的方式去与此。 Browserify选项bundleExternal = false可能会解决问题。调查...... – 2014-10-09 12:06:46

+0

bundleExternal = false并不是完整的答案,因为它留下了最初的“require”语句。因此,第一个示例中的browserify-shim仍然是需要的。但它有帮助。通过这个设置,我可以在绑定Gulp脚本以获取附加组件之前直接.require('codemirror/addon/hint/show-hint.js'),但CodeMirror的外部需求将会被忽略。 – 2014-10-13 14:57:00

+0

在browserify的最新版本中看起来像是将{global:true}应用于browserify-shim转换,这会导致它在依赖项上运行!这允许我们成功地填充require('../../ lib/codemirror')。 – 2014-10-15 18:34:12

回答

11

如果您将browserify-shim{global: true}一起添加,它也应该应用于您的依赖关系的依赖关系(依此类推),而这应该适用于您想要的。

假设你正在使用原始browserify在Gulpfile,而不是:

b.transform('browserify-shim'); 

做:

b.transform({global: true}, 'browserify-shim'); 

如果您使用gulp-browserify,我不知道是否有什么办法指定全局变换。

+0

这对我来说诀窍。谢谢! – poshaughnessy 2015-04-26 13:56:50

+0

谢谢!这也适用于我。 – 2015-07-13 11:08:27

-1
{global: true} 

适合我......为什么这不是默认?

+1

虽然此代码可能回答此问题,但提供 有关_why_和/或_how_此代码的其他上下文 回答此问题将会显着提高其长期价值 。请[编辑]你的答案,添加一些 的解释。 – 2016-03-17 18:28:10