有没有办法让 RequireJS 模块依赖于加载的代码<script>?



我正在一个项目中,我们正在开发一个小部件系统。我将尽量不对此进行太多细节介绍,但是在此系统中,小部件必须能够指定其依赖项。我们通过允许小部件使用 RequireJS 指定其第三方依赖项来实现这一点。

小部件用于内部开发的应用程序。这些应用程序不使用 RequireJS 作为自己的依赖项,它们只是为了小部件而包含 RequireJS。

现在,假设我有一个想要使用库X的小部件.X是一个指定AMD对jQuery(AMD模块jquery)的依赖关系的库。现在,jQuery包含在每个内部开发的应用程序中(这是我们应用程序的核心部分),所以这应该不是问题。但是,由于 jQuery 不是通过 RequireJS 加载的(它是在包含 RequireJS 之前通过脚本标记手动加载的),因此 AMD 模块永远不会注册,并且库 X 无法加载,因为它找不到jquery模块。

如何让库 X 找到 AMD 模块jquery,即使 jQuery 没有使用 RequireJS 加载?我怀疑以某种方式使用 RequireJS 填充程序 (http://requirejs.org/docs/api.html#config-shim) 可以解决这个问题,但我还没有弄清楚如何解决这个问题。任何帮助将不胜感激。

这样做

的方法是这样的:

define('jquery', [], function () {
    return jQuery;
});

这只会将通常加载jQuery通过script,并使其作为 RequireJS 模块提供

同样的原则也适用于在 RequireJS 之前加载的任何其他库,并且它将自身导出为全局空间中的符号:只需为其创建一个假模块,该模块仅返回库在全局空间中导出的符号。

您可以将该代码放在一个名为 jquery.js 的单独文件中,并define([], function () { define(没有模块名称),但我认为这样做没有多大好处。我更喜欢像上面的第一个片段一样使用模块名称调用define,并将定义放在我调用 require.config 之前。

相关内容

最新更新