本技能用于处理 EGG 基础核心概念,包括模块架构、@SingletonProto、@ContextProto、@Inject 装饰器、动态注入、BackgroundTaskHelper 后台任务、EventBus 事件总线和 AOP 切面编程。用于理解 EGG 的基础构建块、依赖注入、对象生命周期管理、运行时多实现动态选择、请求返回后的异步任务处理、事件驱动架构和横切关注点。
模块是 EGG 中基础的代码组织单元。只有模块内的代码会被框架扫描和加载。模块之间相互独立,但可以通过 @Inject 装饰器访问其他模块的对象。
在目录中添加包含 eggModule.name 字段的 package.json 文件来声明该目录为模块:
{
"name": "foo",
"eggModule": {
"name": "foo"
}
}
重要提示:模块名称不能包含 - 或其他特殊字符;使用驼峰命名规则。
app/
└── userModule/ ✅ 驼峰命名
├── package.json
│ └── { "eggModule": { "name": "userModule" } }
└── service.ts ✅ 会被框架加载
app/
├── user-module/ ❌ 名称包含 `-`
│ └── package.json
│ └── { "eggModule": { "name": "user-module" } }
│
└── common/ ❌ 缺少 package.json(不是 module)
└── utils.ts ❌ 不会被框架加载
在模块根目录创建 module.yml 用于模块特定配置: