SuperAPI AI 工具集

fix-cyclic-deps

编程与开发

查看项目

更新于 10-16 00:20

技能介绍

用途:检测并修复 UI5 现代化改造过程中引入的循环模块依赖。当把全局命名空间访问转换为 sap.ui.define 导入时,可能产生 A 导入 B、B 又导入 A 的环,导致 UI5 AMD 加载器对回边模块返回 undefined。

主要能力:构建项目内部模块依赖图,检测 2 节点环与 3 节点以上的长链环(Tarjan SCC),统计使用次数并识别惰性侧或枢纽模块,将回边 sap.ui.define 依赖替换为函数体内的惰性 sap.ui.require("path/to/Module") 同步调用,从而不产生加载器依赖边。

使用方式:运行检测脚本 node <skill-dir>/scripts/detect-cycles.js <project-root>,输出 JSON 含 twoNodeCycles 与 longerChains。按输出移除 sap.ui.define 数组及参数中的环依赖,在每个使用点添加 var Module = sap.ui.require("path/to/Module"),清理自赋值。长链按枢纽模块批量处理。修复后重跑检测脚本确认无环,再运行 npx @ui5/linter --details 回归检查,并用 detect-unsafe-lazy.js 验证静态可达性。

适用场景:现代化工作流最终修复阶段;运行时模块路径正确却返回 undefined;手动重构新增 sap.ui.define 依赖后出现意外 undefined。

限制:同步 sap.ui.require 在目标模块工厂未执行时返回 undefined,仅当目标模块可从入口点静态可达时才安全;若模块在顶层函数体外引用环依赖,无法自动修复,需报告到 MODERNIZATION-ISSUES.md 并手动重构。