ModuleSystem 模块系统
Estimated reading time: 6 minutes基本介绍
ModuleSystem 是框架的模块化加载与依赖管理系统。它负责模块的注册、依赖解析和生命周期初始化,确保模块按正确顺序加载和执行。
整体架构与初始化流程参见 核心架构。
核心 API
register(name, module, dependencies?, source?)
注册一个模块到系统中。
- @param
name(string): 模块名称。 - @param
module(object): 模块对象,需包含初始化方法。 - @param
dependencies(string[]): 依赖模块列表,默认空数组。 - @param
source(string): 可选,模块来源标识,用于扩展模块。 - @return
boolean: 是否成功注册。
扩展模块会直接挂载到 maplebirch 实例上,可通过 GUI 面板启用/禁用。
getModule(name)
获取已注册的模块实例。
- @param
name(string): 模块名称。 - @return 模块对象或
undefined。
dependencyGraph
获取所有模块的依赖关系图。每个条目包含:
dependencies— 直接依赖dependents— 依赖该模块的模块state— 当前状态(如'MOUNTED')allDependencies— 所有传递依赖source— 来源标识(扩展模块)
模块状态说明
每个模块在生命周期中可能处于以下状态:
模块初始化方法
模块可定义以下生命周期方法:
preInit()
在 afterInjectEarlyLoad 阶段调用。每个模块只会执行一次,用于资源预加载和基础设置。此时没有 setup 变量和 V 变量。
Init()
在 :passageinit 事件后调用。每个模块只会执行一次,用于模块主初始化。此时已有 setup 变量和 V 变量。
loadInit()
仅在读取存档时调用。每次读取存档时都会执行,用于恢复存档状态。此时有存档中的 V 变量。
postInit()
在每个段落开始时调用,在 Init 和 loadInit 之后执行。每个段落都会执行一次,此时有当前 V 变量。
完整模块示例
依赖管理
声明依赖
依赖规则
- 模块会在其所有依赖初始化完成后才初始化。
- 支持传递依赖(A 依赖 B,B 依赖 C,则 A 间接依赖 C)。
- 循环依赖会被自动检测并阻止。
依赖图查询
注意事项
- 模块命名:避免使用保留名称,如
core、modules。 - 初始化顺序:依赖解析基于拓扑排序,需理解排序逻辑。
- 错误处理:单个模块初始化失败不会影响其他模块。
- 禁用机制:模块可从模组加载器配置中禁用。
- 扩展模块:扩展模块会挂载到
maplebirch实例上,便于全局访问。
