# 全局法
- 每个模块都注册到全局,直接调用,最常用的
- 每个模块注册到全局唯一键中,例如 cc 一样,更优雅也避免模块重名,缺点是必须注意模块间的调用和注册顺序有关,若模块A内调用了模块B,且是A模块先注册就有可能出现找不到模块B
# 合并法
将依赖的类全部放在一个模块内,缺点是代码臃肿,维护困难
# 间接法
假如a与b模块互相依赖,那么就将依赖的功能代码搬到c模块,c模块引用a和b,杜绝了循环依赖,缺点是增加使用成本,代码结构相对来说会越来越复杂。
# 动态加载法
把静态 import 修改为动态, 缺点是将跳过模板类型检查,以及不能 "立即使用"
- 直接在使用处 import(“module_path”).default
- 或者如下提前定义,免去每次手写路径
type ui_base<T1, T2> = (import("./ui_base").default<T1, T2>);
let ui_base: (typeof import("./ui_base").default);
// ------------------异步函数
// (async () => {
// ui_base = (await import("./ui_base")).default;
// })();
// ------------------或者直接promise.then
import("./ui_base").then(module_a=> {
ui_base = module_a.default;
});
目前本人已知解决循环引用的方法如上,随着项目增大循环引用是不可避免的,各位论坛大神有更好的办法吗?