鉴于:
sap.ui.define([ // in my/ModuleA.js
// "...",
"./ModuleB",
], function (/*...,*/ModuleB) {
// ... ModuleB is undefined here
return/*...*/;
});
sap.ui.define([ // in my/ModuleB.js
// "...",
"./ModuleA"
], function (/*...,*/ModuleA) {
// ... ModuleA is undefined here
return/*...*/;
});
构建并运行应用程序后,检查生成的
Component-preload.js
显示ModuleB
中的my/ModuleA.js
参数或ModuleA
中的my/ModuleB.js
参数为undefined
。
在小项目中很容易检测到这种循环依赖关系。但是如果有多个模块并且它们的依赖关系很复杂,我如何轻松地检测到此类缺陷呢?
打开浏览器控制台并确保启用查看所有“详细”日志。
使用以下 UI5 配置 URL 参数运行应用程序
:sap-ui-xx-debugModuleLoading
值为
true
sap-ui-logLevel
值为
ALL
自 (UI5 1.121) 起,会记录实际错误并显示以下消息:在“my/ModuleB.js”和“my/ModuleA.js”之间检测到循环,为“my/ModuleA.js”返回
- sap.ui.ModuleSystemundefined
在“my/ModuleA.js”和“my/ModuleB.js”之间检测到循环,为“my/ModuleB.js”返回undefined
- sap.ui.ModuleSystem
检测到依赖关系循环:[...] sap.ui.ModuleSystem。
1.91(
提交:
initLibrary
)起,才允许使用所需
"sap/ui/core/Core"
模块中的 API d83868e
初始化您的库。在较低的 UI5 版本中,如果由于循环依赖而在引导过程早期需要,"sap/ui/core/Core"
模块可能会解析为
undefined
。另请参阅