首页 > 解决方案 > AMD 模块 - 在这个例子中它在哪里加载?

问题描述

我有一个复杂的情况,涉及从不同来源加载脚本,但为了理解我的问题,我认为如果我问一个关于我不太熟悉的 AMD 模块的简单问题会更容易。

在使用 AMD 模块的站点上,有一个可用的定义函数。如果我尝试定义和加载这样的模块会发生什么:

define([], () => { return { thisIsMyTest: true } })

我怎么知道可以访问我刚刚定义的那个模块?

我尝试在require._defined中查找

但我看不到它(我也可能错过它,因为我不确定要寻找什么名字)。

想要访问该对象的脚本不是与 AMD 兼容的脚本,但我可以控制这方面,所以我很乐意为它编写代码。

现在为了更清楚地说明问题,我有一个加载到站点上的脚本(我无法控制),我的脚本远程加载另一个外部脚本(我无法控制)。在正常情况下,这个外部脚本将自己暴露为 Window 对象上的一个变量,但是它支持 AMD 模块,并且该站点使用 AMD,所以在这种情况下,这个外部脚本使用定义加载方法,我不知道如何访问它。

更新:

这是加载我的外部库的代码片段:

const libScript = document.createElement('script');
libScript.type = 'text/javascript';
libScript.src = '//some/3rdparty/lib.js'; // source 
libScript.onload = () => {  
  // Use the library that normally exists on window.Lib  
  // However libScript in this site loads using AMD  
  // and window.Lib doesn't exist for sites that use AMD  
  // Other non AMD sites work fine. 
}; 
document.head.appendChild(libScript);

标签: javascriptamd

解决方案


推荐阅读