title 和 color 的卡片组合可以使用一百种不同的值嵌入一百次,而无需复制任何 HTML。
声明变量
将data-composition-variables 添加到任何组合的 <html> 根。它的值是一个变量声明的 JSON 数组——每个变量一个对象:
compositions/card.html
id、type、label 和 default。 id 在组合中必须是唯一的。
变量类型
Studio 编辑 UI 使用
label、type 和特定于类型的选项来为每个变量呈现正确的输入小部件。
什么可以是变量
变量分为两层。上面的五个声明类型涵盖了类型化的原始数据——字符串、数字、颜色、布尔值、枚举。对于其他一切,保存 URL 的string 变量是逃生舱口:您的组合读取 URL 并将其分配给任何需要它的 DOM 元素。
参数化媒体资产
只需通过字符串变量交换 URL,相同的组合就可以呈现不同的图像、视频剪辑或音轨:compositions/product-card.html
运行时在合成脚本运行后探测 DOM,因此会发现运行时从变量分配的
<video> 或 <audio> src 并预先提取以进行渲染。无需额外接线 - 只需从变量中设置 src 即可。<img src>— 从字符串变量分配。 Chrome 在捕获过程中像任何其他图像一样获取它;没有额外的配置。<video src>— 从字符串变量分配,但将计时属性(data-start、data-duration、data-track-index、data-has-audio)保留在元素本身上。探测阶段在脚本运行后扫描video[data-start]元素并读取已解析的src进行预提取。<audio src>— 与视频相同。音频在捕获期间被解码并混合到最终输出中。
交换媒体:您是否也需要改变持续时间?
常见的后续问题:如果变量将<video> 交换到不同的剪辑,那么 data-duration 也需要更改吗?通常不会。 data-duration 在 <video> 和 <audio> 上是可选的 — 将其保留,渲染器将探测源并使用其自然长度:
compositions/hero.html
number 变量,并通过相同的脚本应用它:
compositions/hero.html
data-duration ,因此以编程方式编写的属性的行为与嵌入到源 HTML 中的属性相同。
什么不能是变量
从源 HTML 或 CLI / SDK 读取一小组输入一次,无需重新读取实时 DOM — 没有脚本(因此没有变量)可以更改它们:
更深层次的规则:变量是脚本应用于 DOM 的运行时值。它们可以在脚本运行后驱动渲染器从实时 DOM 读取的任何内容 - 文本、颜色、媒体
src,甚至剪辑 data-duration 如上所示。它们无法更改渲染器在编译时读取一次的输入(维度)或完全位于合成之外的输入(CLI 标志、编码器设置)。
在运行时读取变量
在任何组合脚本中,调用window.__hyperframes.getVariables() 来获取解析的变量值。返回类型为 Partial<Record<string, unknown>> — 使用解构,默认值与声明的 default 值匹配:
compositions/card.html
__hyperframes.getVariables() 是 window.__hyperframes.getVariables() 的简写形式,适用于顶级和子组合脚本。运行时会自动确定子组合的范围,以便每个实例都能看到自己的解析值。
每个实例覆盖(子组合)
将组合嵌入另一个组合时,请在主机元素上使用data-variable-values 来传递该特定实例的覆盖值的 JSON 对象:
index.html
card.html 源,但每个实例接收不同的值。运行时将主机的 data-variable-values 合并到每个实例的子组合声明的默认值上 - 相同的子组合可以同时运行完全不同的内容。
CLI 覆盖(顶级渲染)
在渲染时使用--variables 或 --variables-file 传递变量值。这些覆盖顶级组合声明的默认值:
Terminal
--strict-variables 将变量警告变成错误。 --variables 中未在 data-composition-variables 中声明的任何变量或其值与声明的类型不匹配,都会导致渲染以非零值退出。在 CI 管道中很有用,其中未声明的变量键可能表示拼写错误或架构不匹配。
CLI 覆盖仅适用于顶级组合。子组合变量由每个主机元素上的
data-variable-values 控制。分层和优先级
变量值通过合并三个源来解析,优先级从最低到最高:
任何一层丢失的密钥都会进入下一个较低层。如果没有层提供值,则使用声明的
default。
验证
linter 静态检查变量声明:Terminal
id、type、label、default)以及 type 和 default 值之间的类型不匹配。在渲染之前修复 lint 错误 - 它们表明运行时将无法正确解析变量。
在渲染时,CLI 根据架构验证 --variables 并将问题报告为警告(或 --strict-variables 的错误):
- 未声明 —
--variables中的密钥在data-composition-variables中没有匹配的id - 类型不匹配 — 值的 JavaScript 类型与声明的
type不匹配(例如,需要数字的字符串) - 枚举超出范围 — 枚举值不在声明的
options列表中
以编程方式检查变量
如果您在@hyperframes/core 之上构建工具,则变量声明无需渲染即可读取:
下一步
数据属性
data-composition-variables 和 data-variable-values 属性的完整参考
作文
嵌套组合如何使用变量进行重用
渲染
用于在渲染时传递变量的 CLI 标志
CLI 参考
所有 CLI 命令和标志