团队如何在实际项目中生成、转换并接入 Design Tokens?
团队可以用 Design Tokens 作为设计与代码共享的样式数据。以 Web 项目为例,设计师和开发人员先约定命名和数据来源,再把设计值整理成可维护的数据文件,通过构建生成项目所需的格式,供组件使用。具体流程可以按团队规模调整。
先确定谁维护数据,以及修改从哪里开始
接入之前,设计师和开发人员需要共同确定 Token 表达什么、名称如何组织,以及哪一份数据是最终依据。
Token 可以分为以下层次:
- 基础 Token:保存色板、间距、字号等原始值,例如
color.blue.600。 - 语义 Token:表达用途,例如引用基础色值的
color.text.link。 - 组件 Token:表达特定组件的需求,例如按钮内边距。是否需要这一层取决于组件的复杂度。
业务组件通常优先使用语义 Token。链接颜色变化时,调整映射关系即可,不必逐个修改使用该颜色的组件。
团队还需要明确数据来源。数据可以由设计端维护并导出,也可以在 Git 仓库中维护,再同步到设计工具。无论采用哪种方式,都应约定修改入口和冲突处理方式,避免设计文件与代码各自更新。
设计师如何生成 Design Tokens?
设计师先在设计工具中整理颜色、文字、间距等变量或样式,为它们设置稳定的名称和用途,再通过工具的导出功能、插件或团队脚本,将数据导出为结构化文件。
设计稿中的属性不必全部转成 Token。可以先覆盖多个页面或组件反复使用、需要统一维护的设计决策。
导出时要保留数值,以及适用时存在的类型、引用关系和主题信息。如果导出结果只有一组颜色值,开发人员就难以判断哪些颜色用于正文、链接或错误提示。
工具能否完整导出这些信息,需要结合实际能力确认。缺失的部分应在数据整理环节补齐,并经过评审。
格式转换具体做什么?
转换环节将共享数据变成各平台可以直接使用的产物。例如,Web 项目可以生成 CSS Custom Properties,JavaScript 项目可以生成模块导出。
下面是一个自定义中间数据格式的示例,用来说明引用关系,不代表某个标准或工具的固定格式:
{
"color.blue.600": {
"type": "color",
"value": "#2563eb"
},
"color.text.link": {
"type": "color",
"value": "{color.blue.600}"
},
"space.control.inline": {
"type": "dimension",
"value": "12px"
}
}
{color.blue.600} 是示例约定的引用写法,需要由转换程序解析,不能直接作为 CSS 值使用。构建后可以得到:
:root {
--color-blue-600: #2563eb;
--color-text-link: var(--color-blue-600);
--space-control-inline: 12px;
}
转换程序也可以将引用展开为最终值。具体采用哪种方式,需要结合运行时主题切换和产物的使用方式决定。
转换过程至少应检查名称重复、引用不存在、循环引用,以及数值类型和单位是否符合约定。名称转换也可能引入冲突,例如两个不同名称被转换成同一个 CSS 变量名,需要在生成时发现。
项目如何接入生成结果?
在上述 Web 示例中,可以将生成的文件放入共享样式包,在应用入口加载,再由组件使用:
@import "./tokens.css";
.link-button {
color: var(--color-text-link);
padding-inline: var(--space-control-inline);
}
项目较小时,数据文件、转换脚本和生成结果可以放在同一个仓库。多个应用共用时,可以将生成结果作为独立包发布,让各应用显式升级版本。
如果需要多主题,可以在不同选择器下生成语义变量覆盖。除了处理代码中的变量,还要在设计端明确各主题的对应值。
接入已有项目时,可以先迁移一组基础组件,再逐步替换页面中的硬编码样式。替换前要检查用途:两个位置当前恰好使用同一个颜色,并不意味着它们应该共用同一个语义 Token。
工具和职责如何划分?
具体工具可以更换,但各环节需要有明确的负责人:
| 环节 | 工具类型 | 主要职责 |
|---|---|---|
| 设计维护 | 设计工具的变量、样式及导出能力 | 设计师维护取值、用途和主题关系 |
| 数据整理 | 插件、导出脚本、结构化数据文件 | 设计师与开发共同确认命名和映射 |
| 格式转换 | 自定义脚本或 Token 构建工具 | 开发维护引用解析、类型检查和平台输出 |
| 组件接入 | 样式包、组件库、应用工程 | 开发将 Token 应用于组件并处理迁移 |
| 评审发布 | Git、CI、包管理工具 | 共同审查变更,确认发布范围和升级方式 |
小团队可以由同一个人负责多个环节。每一步都应有维护者,这样出现同步问题时,团队才能找到修改入口。
一次修改怎样完成闭环?
例如,调整链接颜色时可以按以下步骤处理:
- 设计师确认新的取值,以及它在不同主题和状态下的表现。
- 修改约定的数据源,导出或同步到 Token 文件。
- 提交变更,展示原始数据和生成产物的差异。
- CI 执行格式、引用和构建检查。
- 在组件示例页检查实际效果;涉及文字颜色时,还应检查与背景的对比度。
- 发布样式包或合并应用变更,由使用方验证后升级。
生成文件应通过数据源重新构建,手工修改容易在下次生成时丢失。删除或重命名 Token 时,也需要检查使用方,必要时保留旧名称一段时间并安排迁移。
评估流程是否有效,可以看设计修改能否稳定传递到组件,以及团队能否查清每次变更影响了哪些使用方。
备注:内容仅供参考。
