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
中独占声明,并且由 stage
、command
和 command_arguments
组成
stage
: (必需)pre_build
、build
或post_build
之一。它指定 hook 在 Trunk 的构建 pipeline 中的执行时间。command
: (必需) 所需可执行文件的名称或路径。command_arguments
: (可选,默认为无) 要传递给可执行文件的任何参数,按给定的顺序排列。
在每个阶段的相关点,该阶段的所有 hooks 都会同时生成。在此之后,Trunk 会立即等待所有 hooks 退出后再继续,build
阶段的情况除外,将在下文进一步描述。
所有 hooks 都使用与 trunk 相同的 stdin
和 stdout
执行。可执行文件应返回错误代码 0
以指示成功。任何其他代码都将被视为错误并终止构建过程。此外,还向进程提供以下环境变量
TRUNK_PROFILE
: 正在使用的构建 profile。目前,为debug
或release
。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>
可以是 windows
、macos
或 linux
之一。在此条目中,您必须仅指定 command
和 command_argumnets
键。您可以为每个 hook 提供多个覆盖。即,一个用于 windows
,一个用于 macos
,一个用于 linux
。