Assembler 钩子

汇编器钩子

汇编器钩子是一种在汇编器生命周期的特定节点执行代码的方式。提醒一下,汇编器是 AdonisJS 的一部分,它让你能够启动开发服务器、构建应用并运行测试。

这些钩子对文件生成、代码编译或注入自定义构建步骤之类的任务非常有帮助。

例如,@adonisjs/vite 包使用 onBuildStarting 钩子来注入一个构建前端资源的步骤。所以,当你运行 node ace build 时,@adonisjs/vite 包会在其余构建过程之前先构建你的前端资源。这是钩子如何用于自定义构建流程的一个很好的例子。

添加钩子

汇编器钩子定义在 adonisrc.ts 文件的 hooks 键中:

import { defineConfig } from '@adonisjs/core/app'
export default defineConfig({
hooks: {
onBuildCompleted: [
() => import('my-package/hooks/on_build_completed')
],
onBuildStarting: [
() => import('my-package/hooks/on_build_starting')
],
onDevServerStarted: [
() => import('my-package/hooks/on_dev_server_started')
],
onSourceFileChanged: [
() => import('my-package/hooks/on_source_file_changed')
],
},
})

汇编生命周期的每个阶段都可以定义多个钩子。每个钩子都是一组待执行的函数。

我们建议使用动态导入来加载钩子。这样可以确保钩子只在需要时才被加载,而不会在不必要的时机被加载。如果你将钩子代码直接写在 adonisrc.ts 文件中,可能会拖慢应用的启动速度。

创建钩子

钩子只是一个简单的函数。让我们以一个应该执行自定义构建任务的钩子为例。

hooks/on_build_starting.ts
import type { AssemblerHookHandler } from '@adonisjs/core/types/app'
const buildHook: AssemblerHookHandler = async ({ logger }) => {
logger.info('Generating some files...')
await myCustomLogic()
}
export default buildHook

注意,该钩子必须通过默认导出导出。

定义好这个钩子后,你只需像下面这样将它添加到 adonisrc.ts 文件中:

adonisrc.ts
import { defineConfig } from '@adonisjs/core/app'
export default defineConfig({
hooks: {
onBuildStarting: [
() => import('./hooks/on_build_starting')
],
},
})

现在,每次你运行 node ace build 时,onBuildStarting 钩子都会以你定义的自定义逻辑被执行。

钩子列表

以下是可用钩子的列表:

onBuildStarting

此钩子在构建开始之前执行。它对文件生成或注入自定义构建步骤之类的任务很有帮助。

onBuildCompleted

此钩子在构建完成后执行。它也可以用于自定义构建过程。

onDevServerStarted

此钩子在 Adonis 开发服务器启动后执行。

onSourceFileChanged

此钩子在每次源文件(被你的 tsconfig.json 包含)被修改时执行。你的钩子会收到被修改文件的路径作为参数。