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

Is there a way to have RequireJS modules depend on code loaded with <script>?

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

微件用于内部开发的应用程序。这些应用程序不为自己的依赖项使用 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;
});

这只需要通常通过 script 加载的 jQuery 并使其作为 RequireJS 模块可用

同样的原则也适用于在之前 RequireJS 加载的任何其他库,它在全局 space 中将自身导出为符号:只需为其创建一个假模块这只是 returns 库在全局 space.

中导出的符号

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

之前