Skip to content

应用启动自定义

VonaJS 提供了Hook/Monkey机制,可以在应用启动时对系统进行深度的定制

TIP

当然,对于常规业务需求,一般只需创建启动项即可

在解释Hook/Monkey机制之前,有必要先了解应用启动/停止的时序

应用启动时序

应用启动时序分四个步骤:

  1. appLoad: 加载所有的模块
    • 针对每个模块均触发钩子moduleLoadingconfigLoadedmoduleLoaded
  2. appStart: 触发钩子appStart
    • 比如,模块 a-startup 响应此钩子,执行应用启动项(after: false)。参见: 启动项
    • appStart执行后,会设置app.meta.appReady=true
    • 此时,系统提供的所有 API 服务可以接受客户端的请求
  3. appReady: 触发钩子appReady
    • 比如,模块 a-startup 响应此钩子,执行应用启动项(after: true)。参见: 启动项
  4. appStarted: 触发钩子appStarted

应用停止时序

应用停止时序分两个步骤:

  1. appClose: 触发钩子appClose
  2. appClosed: 触发钩子appClosed

钩子清单

系统提供了三个场景来响应应用启动/停止的钩子:

  1. Module Main: 在模块代码中响应模块自身的钩子
  2. Module Monkey: 在模块代码中响应系统钩子
  3. App Monkey: 在应用代码中响应系统钩子

针对不同的场景,为不同的钩子提供了对应的接口定义,从而规范钩子的使用

钩子Module Main 接口Module Monkey 接口App Monkey 接口
moduleLoadingIModuleMainIMonkeyModuleIMonkeyModule
configLoadedIModuleMainIMonkeyModuleIMonkeyModule
moduleLoadedIModuleMainIMonkeyModuleIMonkeyModule
appStartIMonkeySystem / IMonkeyAppStartIMonkeySystem / IMonkeyAppStart
appReadyIMonkeySystem / IMonkeyAppReadyIMonkeySystem / IMonkeyAppReady
appStartedIMonkeySystem / IMonkeyAppStartedIMonkeySystem / IMonkeyAppStarted
appCloseIMonkeySystem / IMonkeyAppCloseIMonkeySystem / IMonkeyAppClose
appClosedIMonkeySystem / IMonkeyAppClosedIMonkeySystem / IMonkeyAppClosed

创建 Module Main

1. Cli命令

bash
$ vona :init:main demo-student

2. 菜单命令

TIP

右键菜单 - [模块路径]: Vona Init/Main

Module Main定义

typescript
export class Main extends BeanSimple implements IModuleMain {
  async moduleLoading() {}
  async moduleLoaded() {}
  async configLoaded(_config: any) {}
}

创建 Module Monkey

1. Cli命令

bash
$ vona :init:monkey demo-student

2. 菜单命令

TIP

右键菜单 - [模块路径]: Vona Init/Monkey

Module Monkey定义

typescript
export class Monkey extends BeanSimple implements IMonkeyModule, IMonkeySystem {
  async moduleLoading(_module: IModule) {}
  async moduleLoaded(_module: IModule) {}
  async configLoaded(_module: IModule, _config: any) {}
  async appStart() {}
  async appReady() {}
  async appStarted() {}
  async appClose() {}
  async appClosed() {}
}

创建 App Monkey

1. Cli命令

bash
$ vona :init:appMonkey

2. 菜单命令

TIP

右键菜单 - [项目路径/src]: Vona Init/App Monkey

App Monkey定义

src/backend/config/monkey.ts

typescript
export class AppMonkey extends BeanSimple implements IMonkeyModule, IMonkeySystem {
  async moduleLoading(_module: IModule) {}
  async moduleLoaded(_module: IModule) {}
  async configLoaded(_module: IModule, _config: any) {}
  async appStart() {}
  async appReady() {}
  async appStarted() {}
  async appClose() {}
  async appClosed() {}
}

基于 MIT 许可发布