Hooks

如果您发现您需要 Trunk 执行额外的构建操作,而该操作未直接支持,那么可以使用 Trunk 灵活的 hooks 系统在 pipeline 的各个阶段启动外部进程。

构建步骤

这是一个 Trunk 构建过程的简要概述,目的是描述何时执行 hooks。请注意,确切的顺序将来可能会更改以添加新功能。

  • 步骤 1 — 读取和解析 HTML 文件。
  • 步骤 2 — 生成要构建的所有 assets 的计划。
  • 步骤 3 — 并行构建所有 assets。
  • 步骤 4 — 完成并将 assets 写入 staging 目录。
  • 步骤 5 — 将 HTML 写入 staging 目录。
  • 步骤 6 - 将 dist 目录内容替换为 staging 目录内容。

hook 阶段与此对应关系如下

  • pre_build: 在步骤 1 之前发生。
  • build: 与步骤 3 同时发生,与 asset 构建并行执行。
  • post_build: 在步骤 5 之后和步骤 6 之前发生。

Hook 执行

Hooks 可以在 Trunk.toml 中独占声明,并且由 stagecommandcommand_arguments 组成

  • stage: (必需) pre_buildbuildpost_build 之一。它指定 hook 在 Trunk 的构建 pipeline 中的执行时间。
  • command: (必需) 所需可执行文件的名称或路径。
  • command_arguments: (可选,默认为无) 要传递给可执行文件的任何参数,按给定的顺序排列。

在每个阶段的相关点,该阶段的所有 hooks 都会同时生成。在此之后,Trunk 会立即等待所有 hooks 退出后再继续,build 阶段的情况除外,将在下文进一步描述。

所有 hooks 都使用与 trunk 相同的 stdinstdout 执行。可执行文件应返回错误代码 0 以指示成功。任何其他代码都将被视为错误并终止构建过程。此外,还向进程提供以下环境变量

  • TRUNK_PROFILE: 正在使用的构建 profile。目前,为 debugrelease
  • TRUNK_HTML_FILE: HTML 文件的完整路径(通常是 TRUNK_SOURCE_DIR 中的 index.html),供 trunk 使用。
  • TRUNK_SOURCE_DIR: Trunk 正在使用的 source 目录的完整路径。这始终是 TRUNK_HTML_FILE 所在的目录。
  • TRUNK_STAGING_DIR: Trunk staging 目录的完整路径。
  • TRUNK_DIST_DIR: Trunk dist 目录的完整路径。
  • TRUNK_PUBLIC_URL: Trunk 配置的公共 URL。

特定于 OS 的覆盖

通常,您希望在不同的 OS 上执行相同的构建步骤,这需要不同的命令。一个典型的例子是在 Linux 上使用 sh 命令,但在 Windows 上使用 cmd 命令。为了适应这种情况,您可以选择为每个 hook 创建特定于 OS 的覆盖。为此,请指定默认 hook,然后在它正下方创建一个 [hooks.<os>] 条目,其中 <os> 可以是 windowsmacoslinux 之一。在此条目中,您必须仅指定 commandcommand_argumnets 键。您可以为每个 hook 提供多个覆盖。即,一个用于 windows,一个用于 macos,一个用于 linux