资产
声明要由 Trunk 处理的资产非常简单且可扩展。
链接资产类型
所有要由 Trunk 处理的链接资产必须遵循以下三个规则
- 必须声明为有效的 HTML
link
标签。 - 必须具有属性
data-trunk
。 - 必须具有属性
rel="{type}"
,其中{type}
是下面列出的资产类型之一。
这通常看起来像这样:<link data-trunk rel="{type}" href="{path}" ..其他选项.. />
。下面描述的每种资产类型都指定了其资产类型所需的和可选的属性。所有 <link data-trunk .../>
HTML 元素都将被关联管道的输出 HTML 替换。
rust
✅ rel="rust"
:Trunk 将编译指定的 Cargo 项目为 WASM 并加载它。这是可选的。如果未指定,Trunk 将在源 HTML 文件的父目录中查找 Cargo.toml
。
href
:(可选)Rust 项目的Cargo.toml
的路径。如果指定了目录,则 Trunk 将在给定目录中查找Cargo.toml
。如果未指定值,则 Trunk 将在源 HTML 文件的父目录中查找Cargo.toml
。data-target-name
:(可选)要加载的目标工件的名称。如果 Cargo 项目有多个目标(二进制文件和库),则可以使用此值来选择应使用哪个目标。data-bin
:(可选)要编译和加载的二进制文件的名称。如果 Cargo 项目有多个二进制文件,则可以使用此值来指定应编译 (使用--bin
) 并由 trunk 使用特定的二进制文件。这隐式地包含了data-target-name
。data-type
:(可选)指定二进制文件应如何加载到项目中。可以设置为main
或worker
。main
是默认值。只能有一个main
链接。对于 worker,将创建一个 wasm-bindgen javascript 包装器和 wasm 文件(带有_bg.wasm
后缀),以二进制名称(如果提供)或项目名称命名。请参阅其中一个 webworker 示例,了解如何加载它们。data-cargo-features
:(可选)要激活的 cargo features 的空格或逗号分隔列表。data-cargo-no-default-features
:(可选)禁用默认的 Cargo features。data-cargo-all-features
:(可选)启用所有 Cargo features。- 与
data-cargo-features
和data-cargo-no-default-features
都不兼容。
- 与
data-wasm-opt
:(可选)使用设置的优化级别运行 wasm-opt。可能的值为0
、1
、2
、3
、4
、s
、z
或 *空值* 表示 wasm-opt 的默认值。将此选项设置为0
以显式禁用 wasm-opt。值1-4
是速度越来越快的优化级别。s
和z
(z 表示更多优化)则针对二进制文件大小进行优化。仅在--release
模式下使用。data-wasm-opt-params
:(可选)使用附加参数运行 wasm-opt。仅在--release
模式下使用。data-keep-debug
:(可选)指示wasm-bindgen
在最终 WASM 输出中保留调试信息,即使在--release
模式下也是如此。这可能与 wasm-opt 的使用冲突,因此为了确保万无一失,建议在使用此选项时将data-wasm-opt="0"
设置为0
。data-no-demangle
:(可选)指示wasm-bindgen
不对 Rust 符号名称进行 demangle。data-reference-types
:(可选)指示wasm-bindgen
启用 reference types。data-weak-refs
:(可选)指示wasm-bindgen
启用 weak references。data-typescript
:(可选)指示wasm-bindgen
输出 Typescript 绑定。默认为 false。data-bindgen-target
:(可选)指定wasm-bindgen
flag--target
的值(有关可能的值,请参见链接)。默认为no-modules
。主要用例是切换到web
和data-type="worker"
,这降低了向后 兼容性,但有一些 优点。data-loader-shim
:(可选)指示trunk
为 web workers 创建一个 loader shim。默认为 false。data-cross-origin
:(可选)加载代码和脚本资源时的crossorigin
设置。默认为 plainanonymous
。data-integrity
:(可选)代码和脚本资源的integrity
摘要类型。默认为 plainsha384
。data-wasm-no-import
:(可选)默认情况下,Trunk 将生成从 Rust 导出的函数的导入。启用此标志将禁用此功能。默认为 false。data-wasm-import-name
:(可选)全局变量的名称,从 WASM 导入的函数将在该变量下可用(在window
对象下)。默认为wasmBindings
(这使它们可以通过window.wasmBindings.<functionName>
访问)。data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。data-initializer
:(可选)initializer 的(模块)JavaScript 文件的路径。data-cargo-profile
:(可选)要使用的 cargo profile,而不是默认的,用于 release 或 dev 模式。data-cargo-profile-release
:(可选)要使用的 cargo profile,而不是默认的,用于 release 模式。覆盖data-cargo-profile
设置。data-cargo-profile-dev
:(可选)要使用的 cargo profile,而不是默认的,用于 dev 模式。覆盖data-cargo-profile
设置。
sass/scss
✅ rel="sass"
或 rel="scss"
:Trunk 使用官方的 dart-sass 进行编译。只需从源 HTML 链接到您的 sass 文件,Trunk 将处理其余的事情。此内容已进行哈希处理以进行缓存控制。href
属性必须包含在指向要处理的 sass/scss 文件的链接中。
data-inline
:(可选)此属性将来自 SASS/SCSS 文件的编译后的 CSS 内联到<style>
标签中,而不是使用<link rel="stylesheet">
标签。data-integrity
:(可选)代码和脚本资源的integrity
摘要类型。默认为 plainsha384
。data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
css
✅ rel="css"
:Trunk 将复制在源 HTML 中找到的链接的 css 文件,而无需内容修改。此内容已进行哈希处理以进行缓存控制。href
属性必须包含在指向要处理的 css 文件的链接中。
- 将来,Trunk 将解析本地
@imports
,将处理压缩(请参阅 trunk#7),我们甚至可能会研究一种模式,即源树中找到的任何 CSS 都将被捆绑,这将实现一种不错的零配置“组件样式”模式。有关更多详细信息,请参见 trunk#3。 data-integrity
:(可选)代码和脚本资源的integrity
摘要类型。默认为 plainsha384
。data-no-minify
:(可选)选择不进行压缩。另请参阅:Minification。data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
tailwind
✅ rel="tailwind-css"
:Trunk 使用官方的 tailwindcss cli 进行编译。只需从源 HTML 链接到您的 tailwind css 文件,Trunk 将处理其余的事情。此内容已进行哈希处理以进行缓存控制。href
属性必须包含在指向要处理的 sass/scss 文件的链接中。
data-inline
:(可选)此属性将来自 tailwind 编译的编译后的 CSS 内联到<style>
标签中,而不是使用<link rel="stylesheet">
标签。data-integrity
:(可选)代码和脚本资源的integrity
摘要类型。默认为 plainsha384
。data-no-minify
:(可选)选择不进行压缩。另请参阅:Minification。data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
icon
✅ rel="icon"
:Trunk 将 href
属性中指定的 icon 图像复制到 dist
目录。此内容已进行哈希处理以进行缓存控制。
data-integrity
:(可选)代码和脚本资源的integrity
摘要类型。默认为 plainsha384
。data-no-minify
:(可选)选择不进行压缩。另请参阅:Minification。data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
inline
✅ rel="inline"
:Trunk 将 href
属性中指定的文件内容内联到 index.html
中。此内容完全复制,不执行哈希处理。
type
:(可选)– 如果不存在,则类型由文件扩展名推断。html
,svg
css
:CSS 包装在style
标签中js
:JavaScript 包装在script
标签中mjs
,module
:JavaScript 包装在带有type="module"
的script
标签中
copy-file
✅ rel="copy-file"
:Trunk 将 href
属性中指定的文件复制到 dist
目录。此内容完全复制,不执行哈希处理。
data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
copy-dir
✅ rel="copy-dir"
:Trunk 将递归地将 href
属性中指定的目录复制到 dist
目录。此内容完全复制,不执行哈希处理。
data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
脚本资产类型
脚本资产更加多样化。
脚本资产
由 Trunk 处理的经典脚本资产必须遵循以下三个规则
- 必须声明为有效的 HTML
script
标签。 - 必须具有属性
data-trunk
。 - 必须具有属性
src
,指向一个脚本文件
一个*有效*的 HTML script
标签始终具有结束标签(例如 <script></script>
)。自闭合脚本标签(例如 <script />
)是无效的 HTML 脚本标签,将触发警告,并可能创建无法正常工作的 HTML 文件。
这通常看起来像这样:<script data-trunk src="{path}" ..其他选项..></script>
。所有 <script data-trunk ...></script>
HTML 元素都将被关联管道的输出 HTML 替换。
Trunk 将复制在源 HTML 中找到的脚本文件,而无需内容修改。此内容已进行哈希处理以进行缓存控制。src
属性必须包含在指向要处理的脚本文件的脚本中。
data-no-minify
:(可选)选择不进行压缩。另请参阅:Minification。data-target-path
:(可选)输出放置在 dist 目录内的路径。如果不存在,则该目录放置在 dist 根目录中。路径必须是相对路径,且不包含..
。
JS 代码片段
从 wasm-bindgen JS 代码片段功能 生成的 JS 代码片段会自动复制到 dist 目录,进行哈希处理并准备就绪。无需其他设置。只需在您的应用程序中使用该功能,Trunk 将负责其余的事情。
图像 & 其他资源
通过将如下链接添加到您的源 HTML,可以将图像和其他资源类型复制到 dist
目录中:<link data-trunk rel="copy-file" href="path/to/image"/>
。支持任何普通文件类型。这将导致 Trunk 查找目标资源,并将其未修改地复制到 dist
目录。不会应用哈希处理。链接本身将从 HTML 中删除。要复制整个资产/图像目录,可以使用以下 HTML:<link data-trunk rel="copy-dir" href="path/to/images-dir"/>
。
这将允许您的 WASM 应用程序直接从 dist
目录引用图像,并且 Trunk 将确保这些图像在 dist
目录中可用以供服务。
随着 Trunk 继续成熟,我们将找到更好的方法来包含图像和其他资源。对内容进行哈希处理以进行缓存控制非常棒,我们只需要找到一种好的模式来处理 Rust 组件中引用的图像。请参与 trunk#9 中的讨论!在那里见。
指令
您可以通过将此添加到您的 <head>
中来指示 Trunk 将传递给 --public-url
的 URL 写入 HTML 输出:<base data-trunk-public-url/>
。
Trunk 将元素的 href
属性设置为公共 URL。这更改了相对 URL 的行为,使其相对于公共 URL 而不是当前位置。
您还可以在运行时使用 document.baseURI
访问此值,这对于需要知道其托管的基本 URL 的应用程序(例如,用于路由)很有用。