7

我正在尝试通过使用 browserify-shim 将某些模块从包中填充出来来重构使用 Browserify 的库。具体来说,该库使用 require("codemirror") 但我想提供一个不包含 CodeMirror 的包,而是使用通过 CDN 提供的包。

所以我的 package.json 中有 browserify-shim 配置,比如

  "browserify-shim": {
    "jquery": "global:jQuery",
    "codemirror": "global:CodeMirror"
  }

到目前为止,一切都很好。require('jquery') 和 require('codemirror') 已从 browserified 包中消失,并被预期的代码片段替换,以从窗口对象中获取 jQuery 和 CodeMirror。

该库还需要一些 CodeMirror 附加组件。例如 require('codemirror/addon/hint/show-hint.js')。没关系。我想捆绑那个附加组件。然而,在这个附加组件中有一个包含 require("../../lib/codemirror") 的 UMD 包装器。Browserify 看到了这一点,并因此从 /node_modules/codemirror/lib/codemirror.js 捆绑了 CodeMirror(我认为)。我希望它改用 codemirror shim 中定义的 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"]
    }
  }

那 require("../../lib/codemirror") 不会消失!我确定我错过了一些东西。

我从 Gulp 脚本运行它,但我认为这不会有任何区别。Browserify 版本 3.38.1。Browserify-shim 版本 3.7.0。

有任何想法吗?

4

2 回答 2

11

如果您添加browserify-shimwith {global: true},它也应该应用于您的依赖项的依赖项(等等),这应该可以满足您的需求。

假设您在 Gulpfile 中使用原始 browserify,而不是:

b.transform('browserify-shim');

做:

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

如果您使用gulp-browserify,我不确定是否有任何方法可以指定全局转换。

于 2014-10-27T20:29:32.350 回答
-1
{global: true}

对我有用...为什么这不是默认设置?

于 2016-03-16T13:46:28.787 回答