我正处于开发小部件系统的项目中。我将尽量不详细讨论这个问题,但在这个系统中,小部件必须能够指定它的依赖关系。我们通过允许小部件使用RequireJS指定其第三方依赖项来完成此任务。
小部件用于内部开发的应用程序。这些应用程序不使用RequireJS作为它们自己的依赖项,它们仅仅为了小部件而包含RequireJS。
现在,让我们说我有一个想要使用库X的小部件.X是一个指定AMD对jQuery的依赖的库(AMD模块jquery
)。现在,jQuery包含在每个内部开发的应用程序中(它是我们应用程序的核心部分),所以这不应该是一个问题。但是,由于jQuery未通过RequireJS加载(在包含RequireJS之前通过脚本标记手动加载),因此AMD模块从未注册,并且库X无法加载,因为它无法找到{ {1}}模块。
如果使用RequireJS未加载jQuery,我如何让库X找到AMD模块jquery
?我怀疑使用RequireJS垫片(http://requirejs.org/docs/api.html#config-shim)在某种程度上可以解决这个问题,但我还没弄明白怎么回事。非常感谢任何帮助。
答案 0 :(得分:1)
这样做的方法是这样的:
define('jquery', [], function () {
return jQuery;
});
这只是通过jQuery
正常加载的script
并将其作为RequireJS模块提供
同样的原则也适用于在 RequireJS之前加载的任何其他库,并将其自身导出为全局空间中的符号:只需为它创建一个假模块,它只返回库导出的符号全球空间。
您可以将该代码放在一个名为jquery.js
的单独文件中,define
为define([], function () {
(没有模块名称),但我没有看到做多少好处那。我更喜欢使用上面第一个代码段中的模块名称来调用define
,并在调用require.config
之前输入定义。