我正在尝试加载几个RequireJS配置。在我的HTML中,我通过
加载我的主配置 <script src="../lib/require.js" data-main="../app/requireConfig"></script>
一旦文档准备就绪,我想加载我的所有插件配置。所以我创建了一个新的定义文件,其中包含一个调用require.config
:
define(['sharedServices/logger'], function (logger) {
function configVideo() {
logger.info('Adding video modules');
require.config({
path: {
Capabilities: 'videoProvider/Capabilities',
VideoProviderEnums: 'videoProvider/VideoProviderEnums',
VideoProviderCommon: 'videoProvider/VideoProviderCommon',
VideoProviderInstance: 'videoProvider/VideoProviderInstance',
DummyVideoInstance: 'videoProvider/DummyProvider/DummyVideoInstance'
}
});
}
return {
configVideo: configVideo
};
})
但是,我收到以下错误:
未捕获错误:匿名的define()模块不匹配:函数(记录器){
答案 0 :(得分:2)
The error you're getting与所述问题(加载多个配置)没有直接关系,但是由代码加载的组织方式引起。正如手册所说:
避免错误:
- 确保通过RequireJS API加载调用define()的所有脚本。不要在HTML中手动编写脚本标记以加载其中包含define()调用的脚本。
- 如果手动编写HTML脚本标记代码,请确保它只包含命名模块,并且不会加载与该文件中某个模块同名的匿名模块。
现在的问题是,当手动加载模块时(正如你所说的那样#34;当文档准备好了#34;时,你能澄清引用源的实际加载方式吗?)requirejs不知道模块来自何处,因此无法为其指定名称。如果模块是通过requirejs api加载的(例如,如果它出现在define
调用的依赖项列表中)并且requirejs本身确定了它的脚本路径,那么它将在文件之后命名模块。
一般情况下,建议只加载一个脚本标记,加载所有requirejs管理的javascript。这使得开发设置更紧密地匹配最终的优化情况(所有脚本连接在一起)。如有必要,仍然可以在单个模块内进行require.config
调用,并且只有在文档准备好后才能执行某些代码。例如,我们的许多应用程序在main.js
(由requirejs脚本标记加载的模块)中执行以下操作:
// sort of bootstrap config
require.config({
packages: [{
name: "our-framework",
location: "../../our-framework/src/"
}],
// here some app-specific requirejs options
waitSeconds: 5
});
// load the framework, the "our-framework/rjs-config" contains
// framework specific requirejs config (another require.config call)
require(["our-framework/rjs-config"], function() {
// in this context both require configs are loaded
require(["application"], function(application) {
application.init().run();
});
});