有没有办法让 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
.
之前
我在一个项目中,我们正在开发一个小部件系统。我将尽量不对此进行过多的详细介绍,但在此系统中,小部件必须能够指定其依赖项。我们通过允许小部件使用 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
.