【问题标题】:How can I "disable" require.js at runtime?如何在运行时“禁用”require.js?
【发布时间】:2014-07-14 21:20:10
【问题描述】:

我和我的团队有一个 AngularJS 应用程序,该应用程序使用 RequireJS,而是在使用 RequireJS 的现有站点的上下文中加载。在构建过程中,我将所有脚本缩小/连接到一个 JS 文件中,其中包括某些供应商库,如 Lodash、Moment 等。

运行与父级隔离的站点很好,但在父应用程序的上下文中,我得到well-documented error

Uncaught Error: Mismatched anonymous define() module: function () { return _; }

我无法控制父应用程序,有没有办法在运行时“禁用”RequireJS 或将其配置为忽略我的脚本?

我们目前的解决方案是修改供应商库并删除 AMD 代码,但这是不希望的,因为我们使用 Bower(使用 grunt-bower-install)并且希望自动更新依赖项而不是依赖手动流程和自定义黑客。

【问题讨论】:

  • 如果您单独运行应用程序,您是否正在执行相同的连接和缩小?
  • 该错误的堆栈跟踪是什么?你的父网站实际上使用了define 函数吗?
  • "如果您单独运行应用程序,您是否正在执行相同的连接和缩小?"是的,这是相同的过程。我不知道父站点在做什么,但我可以简单地通过在我的 Angular 应用程序顶部包含 RequireJS 来复制问题。
  • 啊,所以你的 Angular 应用程序实际上不应该使用 require?我以某种方式认为是的。

标签: javascript angularjs requirejs amd


【解决方案1】:

如果您确信可以控制所有相关的脚本依赖项,可以考虑的一种方法是在缩小/连接脚本的开头隐藏 define 函数。

例如,在缩小脚本的开头执行以下操作:

var __origDefine = define;
define = null;

在缩小脚本的末尾:

define = __origDefine;

【讨论】:

  • 我昨晚尝试了这个确切的解决方案,到目前为止它正在工作,但我正在等待部署到父站点以确保。我打算回答我自己的问题,但如果这可行,我会接受你的回答,干杯!
猜你喜欢
  • 1970-01-01
  • 2021-07-12
  • 2015-07-22
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多