所以我遇到了一个有趣的用例,我使用Browserify将我的所有资产捆绑在一个项目中,但是当某个应用程序内窗口需要加载大型外部(项目外部)模块时被访问 . (这是一个由三个脚本组成的视频播放器模块,可在需要时异步拉入) .
目前,如果在Browserified app.js
文件之前加载了requireJS模块,我会收到来自 uncalled object
错误的各种错误,如果在Browserified代码之后加载,则会出现 cannot find module
错误 .
无论如何,我可以让Browserify和RequireJS在同一页面上很好地播放吗?我在失去理智!
3 回答
TL; DR - 在您的浏览器化脚本中使用
window.require
.也许它仍然可以帮助某人 . 我碰巧使用完全基于requireJS风格的AMD的“外部”基于dojo的库,这绝对不是“可浏览的”并且无法转换为CommonJS或任何理智 . 我自己的代码完全是浏览器化的 . 这样工作正常:
require
函数):window
对象上的require
函数('cause you' ll有一个本地browserify-require
遮蔽全局对象)require
来加载子模块等,工作正常,因为代码不在浏览器上下文中,并且全局require
没有被遮蔽 .也许如果你有一些纯粹的标准RequireJS模块,你可以以某种方式将它们转换为可浏览,但在我的情况下,这不是一个选项 .
有一个名为browserify-derequire的工具可以通过重命名browserify的require statmenets来解决此问题,以避免命名冲突 .
它可以使用以下命令安装:
通过将构建命令更改为:将其用作browserify插件:
有关此问题的更多讨论,请访问:https://github.com/substack/node-browserify/issues/790
对于gulp友好的解决方案(类似于@ Cride5提出的),您可以使用gulp-derequire插件 .
来自docs的基本示例:
插件也基于derequire模块,因此支持所有选项 .