资源

声明要由 Trunk 处理的资源非常简单且可扩展。

链接资源类型

所有要由 Trunk 处理的链接资源必须遵循以下三个规则

这通常看起来像这样:<link data-trunk rel="{type}" href="{path}" ..其他选项.. />。下面描述的每种资源类型都指定了其资源类型的必需和可选属性。所有 <link data-trunk .../> HTML 元素都将被替换为关联管道的输出 HTML。

rust

rel="rust":Trunk 将编译指定的 Cargo 项目为 WASM 并加载它。这是可选的。如果未指定,Trunk 将在源 HTML 文件的父目录中查找 Cargo.toml

sass/scss

rel="sass"rel="scss":Trunk 使用官方的 dart-sass 进行编译。只需从源 HTML 链接到您的 sass 文件,Trunk 将处理其余的事情。此内容已哈希处理以进行缓存控制。href 属性必须包含在指向要处理的 sass/scss 文件的链接中。

css

rel="css":Trunk 将复制在源 HTML 中找到的链接 css 文件,而无需内容修改。此内容已哈希处理以进行缓存控制。href 属性必须包含在指向要处理的 css 文件的链接中。

tailwind

rel="tailwind-css":Trunk 使用官方的 tailwindcss cli 进行编译。只需从源 HTML 链接到您的 tailwind css 文件,Trunk 将处理其余的事情。此内容已哈希处理以进行缓存控制。href 属性必须包含在指向要处理的 sass/scss 文件的链接中。

icon

rel="icon":Trunk 将复制 href 属性中指定的图标图像到 dist 目录。此内容已哈希处理以进行缓存控制。

inline

rel="inline":Trunk 将 href 属性中指定的文件内容内联到 index.html 中。此内容完全复制,不执行哈希处理。

copy-file

rel="copy-file":Trunk 将复制 href 属性中指定的文件到 dist 目录。此内容完全复制,不执行哈希处理。

copy-dir

rel="copy-dir":Trunk 将递归复制 href 属性中指定的目录到 dist 目录。此内容完全复制,不执行哈希处理。

脚本资源类型

脚本资源更加多样化。

脚本资源

由 Trunk 处理的经典脚本资源必须遵循以下三个规则

这通常看起来像这样:<script data-trunk src="{path}" ..其他选项..></script>。所有 <script data-trunk ...></script> HTML 元素都将被替换为关联管道的输出 HTML。

Trunk 将复制在源 HTML 中找到的脚本文件,而无需内容修改。此内容已哈希处理以进行缓存控制。src 属性必须包含在指向要处理的脚本文件的脚本中。

JS 代码片段

wasm-bindgen JS 代码片段功能 生成的 JS 代码片段会自动复制到 dist 目录,进行哈希处理并准备就绪。无需其他设置。只需在您的应用程序中使用该功能,Trunk 将负责其余的工作。

图片 & 其他资源

通过将如下链接添加到源 HTML:<link data-trunk rel="copy-file" href="path/to/image"/>,可以将图像和其他资源类型复制到 dist 目录中。支持任何普通文件类型。这将导致 Trunk 查找目标资源,并将其未修改地复制到 dist 目录。不会应用哈希处理。链接本身将从 HTML 中删除。要复制整个资源/图像目录,可以使用以下 HTML:<link data-trunk rel="copy-dir" href="path/to/images-dir"/>

这将允许您的 WASM 应用程序直接从 dist 目录引用图像,并且 Trunk 将确保图像在 dist 目录中可用以供服务。

注意: 随着 Trunk 的不断成熟,我们将找到更好的方法来包含图像和其他资源。为缓存控制哈希内容很棒,我们只需要找到一种与 Rust 组件中引用的图像配合使用的良好模式。请参与 trunk#9 中的讨论!在那里见。

子资源完整性 (SRI)

Trunk 可以自动生成文件的哈希值,并为 Web 应用程序获取的资源添加 integrity 属性。默认情况下启用此功能,但可以使用 data-integrity 属性覆盖。请参阅不同的资源类型。

以下值可用

指令

您可以通过将此添加到 <head> 中来指示 Trunk 将传递给 --public-url 的 URL 写入 HTML 输出:<base data-trunk-public-url/>

Trunk 将元素的 href 属性设置为公共 URL。这会将相对 URL 的行为更改为相对于公共 URL 而不是当前位置。

您还可以在运行时使用 document.baseURI 访问此值,这对于需要知道其托管基本 URL 的应用程序(例如,用于路由)很有用。

钩子

如果您发现需要 Trunk 执行其他不支持的构建操作,则可以使用 Trunk 灵活的钩子系统在管道的各个阶段启动外部进程。钩子可以专门在 Trunk.toml 中声明,并且包含 stagecommandcommand_arguments

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

Trunk 的构建流程

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

钩子阶段与此对应关系如下

钩子环境 & 执行

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

操作系统特定的覆盖

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

自动重载

v0.14.0 开始,Trunk 现在附带在 Trunk 构建管道完成时自动重新加载您的 Web 应用程序的功能。

压缩

Trunk 支持压缩资源。默认情况下禁用此功能,并且可以在不同级别进行控制。

在任何情况下,Trunk 本身不执行压缩,而是将该过程委托给执行实际实现的依赖项。如果压缩破坏了某些东西,则很可能是该依赖项的问题。

从 Trunk 0.20.0 开始,默认情况下禁用压缩。可以使用命令行中的 --minify (或 -M) 开关来启用它。或者,可以使用 Trunk.toml 文件中的 build.minify 字段来控制它。此字段的值是一个枚举,具有以下可能的值:never(默认,从不压缩)、on_release(在运行 Trunk 时使用 --release 进行压缩)、always(始终压缩)。

启用压缩后,所有 Trunk 已知的资源(这不包括对 Trunk 不透明的 copy-dircopy-file blob)都将被压缩。可以使用 data-no-minify 属性(请参阅单个资源配置)选择退出此过程(按资源)。在这种情况下,资源将永远不会被压缩。