系统启动自定义
ZovaJS 提供了Hook/Monkey机制,可以在系统启动时对系统进行深度的定制
在解释Hook/Monkey机制之前,有必要先了解系统启动/停止的时序
🔥与应用启动的区别
在 SSR 场景中,应用启动是针对每一个 Request 而言的,系统启动则与 Request 无关
系统启动时序
系统启动时序分三个时机:
sysInitialize: 触发钩子sysInitializesysInitialized: 触发钩子sysInitializedsysReady: 触发钩子sysReady
系统停止时序
系统停止时序只有一个时机:
sysClose: 触发钩子sysClose
模块加载时序
模块加载时序分两个时机:
moduleLoading: 触发钩子moduleLoading- 比如,模块 a-router 响应此钩子,将模块提供的路由注册到系统路由表中
moduleLoaded: 触发钩子moduleLoadedconfigLoaded: 触发钩子configLoaded
钩子清单
系统提供了三个场景来响应钩子:
Module Main: 在{module}/src/mainSys.ts中响应模块自身的钩子Module Monkey: 在{module}/src/monkeySys.ts中响应 Sys 钩子Sys Monkey: 在{project}/src/front/config/monkeySys.ts中响应 Sys 钩子
针对不同的场景,为不同的钩子提供了对应的接口定义,从而规范钩子的使用
| 钩子 | Module Main 接口 | Module Monkey 接口 | Sys Monkey 接口 |
|---|---|---|---|
| moduleLoading | IModuleMainSys | IMonkeyModuleSys | IMonkeyModuleSys |
| moduleLoaded | IModuleMainSys | IMonkeyModuleSys | IMonkeyModuleSys |
| configLoaded | IModuleMainSys | IMonkeyModuleSys | IMonkeyModuleSys |
| sysInitialize | IMonkeySysInitialize | IMonkeySysInitialize | |
| sysInitialized | IMonkeySysInitialized | IMonkeySysInitialized | |
| sysReady | IMonkeySysReady | IMonkeySysReady | |
| sysClose | IMonkeySysClose | IMonkeySysClose |
创建 Module Main
1. Cli命令
bash
$ zova :init:mainSys demo-student2. 菜单命令
TIP
右键菜单 - [模块路径]: Zova Init/Main Sys
Module Main定义
typescript
export class MainSys extends BeanSimple implements IModuleMainSys {
async moduleLoading() {}
async moduleLoaded() {}
async configLoaded(_config: any) {}
}创建 Module Monkey
1. Cli命令
bash
$ zova :init:monkeySys demo-student2. 菜单命令
TIP
右键菜单 - [模块路径]: Zova Init/Monkey Sys
Module Monkey定义
typescript
export class MonkeySys extends BeanSimple implements IMonkeyModuleSys, IMonkeySysInitialize, IMonkeySysInitialized, IMonkeySysReady, IMonkeySysClose {
async moduleLoading(_module: IModule) {}
async moduleLoaded(_module: IModule) {}
async configLoaded(_module: IModule, _config: any) {}
async sysInitialize() {}
async sysInitialized() {}
async sysReady() {}
async sysClose() {}
}创建 Sys Monkey
1. Cli命令
bash
$ zova :init:sysMonkey2. 菜单命令
TIP
右键菜单 - [项目路径/src]: Zova Init/Monkey Sys
Sys Monkey定义
src/front/config/monkeySys.ts
typescript
export class SysMonkey extends BeanSimple implements IMonkeyModuleSys, IMonkeySysInitialize, IMonkeySysInitialized, IMonkeySysReady, IMonkeySysClose {
async moduleLoading(_module: IModule) {}
async moduleLoaded(_module: IModule) {}
async configLoaded(_module: IModule, _config: any) {}
async sysInitialize() {}
async sysInitialized() {}
async sysReady() {}
async sysClose() {}
}