资讯动态

设计系统组件化实战:从设计令牌到规模化应用

发布时间:2026/9/14 5:32:37 来源:尧图企业网站定制
做中后台产品的人大概率都经历过这种失控场面项目迭代到第三年光一个按钮线上就有四五个变种。有的圆角6像素有的8像素还有个页面嫌麻烦直接贴了一张背景图片冒充按钮。新来的前端改样式先要挨个问这个间距是几问不到答案就只能打开控制台自己量。设计师辛辛苦苦交付的稿子两个月后再看线上产品已经完全对不上。别急着怪某位同学执行力不行这其实是设计资产的传导链路从根上就断了。这篇文章是设计系统系列的第8章。前面几章分别聊了设计语言的梳理、规范文档的写法、组织设计评审的方法这一章集中解决两个最硬的问题组件化构建和规模化应用。说人话就是怎么把设计系统拆成真正好用的组件以及怎么让这套组件在设计、前端、多个业务线之间真正跑起来而不是躺在仓库里吃灰。写这篇内容的初衷是因为我发现很多团队都卡在这两步组件库搭了个架子然后就没有然后了。所以这一章会刻意少讲空理论多放真实可用的方法、参数和流程适合正在搭组件库、或者搭了一半推不动的设计、前端团队参考。1. 设计系统与组件化到底在解决什么问题1.1 从一次样式失控事故说起我去年接触过一个客户二十多人的研发团队做一套电商后台产品线横跨订单、库存、客服三个大模块。因为并行开发各模块分别起了项目设计资源也很紧张基本是谁有空谁出图。半年后复盘时发现光登录页的输入框线上就有六种写法有的用框架默认样式有的改了圆角有的干脆用div自己拼了一个。主题色更是惨不忍睹有人用#1890ff有人用#1677ff还有人直接用了个偏紫的蓝理由是新来的设计师给的。这个场景你应该不陌生。深挖下去问题根本不是同学们不遵守规范而是整个链条里少了两个东西第一设计侧没有一套能被代码直接消费的资产规范文档写得再多开发也没有精力逐条对照第二组件没有统一的单一事实源同一个控件在不同项目里被实现了很多遍每一遍都走样一点最后就完全失控了。所以后来我们做的第一件事不是急着画更多规范页面而是先建立了同步机制设计稿里的颜色、字号、间距以设计令牌的方式落到代码里前端不再照着效果图临摹而是直接引用组件库里的现成控件。这一步做完才算是把失控按住了。提示出现样式失控时别先开规范宣导会那是治标不治本。先看设计决策能不能直接传导到代码传导不了任何宣导都是白费。1.2 设计系统的三层逻辑令牌、组件、模式很多人以为设计系统就是一套UI组件库这是最常见的误解。真正可落地的设计系统我习惯拆成三层看设计令牌、组件、模式。设计令牌是最小的设计单元包括颜色、字体、字号、间距、圆角、阴影、动效曲线等。它不描述任何完整控件只定义这个系统里有哪些颜色可选、间距有哪几个档位是设计决策的原子化表达。组件由令牌组成有完整的视觉形态和行为逻辑比如按钮、输入框、弹窗、表格。组件是可复用的最小界面单位也是设计系统能直接产生工程价值的层。模式是组件之上的组合解决一个具体业务场景比如创建订单向导搜索结果筛选页。模式层往往是设计系统最有业务价值、但最容易被忽略的一层。用一个类比来记令牌是乐高的最小积木粒组件是拼好的小汽车房子模式就是说明书上的完整场景。只做组件不做模式团队拿到的是零件包还得自己摸索怎么拼只做模式不做组件换个页面又得重新拼一遍。这三层之间是严格单向依赖的组件只能引用令牌不能直接写死十六进制色值模式只能组合组件不能绕过组件去自己造控件。这个约束一旦被打破设计系统很快会退化回样式混乱的起点。1.3 为什么是组件化而不是规范化我经常被问到一个问题我们已经有设计规范文档了为什么还要搞组件化这个问题值得正面回答。规范文档是建议组件是默认执行。文档写主按钮圆角8像素次按钮圆角4像素开发看到了还得手动去填填的时候多一像素少一像素很难说。但组件化之后按钮的圆角就写死在组件里开发者从组件库里拿过来就是这个样子不是靠自觉执行而是从机制上就不给你走样的机会。这个思路在不同领域其实完全一致。不管是数据库设计里的表结构规范、还是软件系统的模块拆分、抑或是更细分的iOS组件化、ROS机器人节点组件化核心都是同一件事把高内聚低耦合的单元抽出来定义好边界和接口然后让上层业务去组合复用。设计系统的组件化只是这个思想在界面领域的应用。理解了这一点你会发现设计系统团队和底层平台团队做的事本质上没有区别。2. 组件化构建的核心方法从设计稿到代码2.1 组件拆分的粒度怎么定才不坑组件拆分是组件化构建里最考验经验的一步。很多人一上来就搬原子设计方法论把界面拆成原子、分子、有机体、模板、页面五层理论上很美实操起来很容易翻车。我见过一个团队把按钮拆成了Icon、Text、Spinner、ButtonLayout四个原子组件意图是最大程度复用。结果业务开发做一个普通按钮要同时引四个包还要自己拼间距和对齐开发者直接骂娘最后按钮组件还是被废掉了。我自己定了三个拆分标准你可以直接抄一个组件必须是业务可以直接消费的最小单位。按钮就是一个按钮包含图标、文字、加载态、禁用态业务拿过去不改代码就能用不需要自己拼装。同一个形态重复出现至少三次才值得组件化。如果某个卡片样式只在一个页面用了一次先别急着抽象等它重复出现再说。过早抽象和过晚抽象都是成本。组件Props尽量少状态尽量收敛在内部。一个Button暴露20个Props就是灾难正确的做法是只暴露variant、size、disabled、loading这类语义化属性把样式细节全藏在组件内部。拆粒度的时候我的经验是宁粗勿细。粒度太粗顶多造成少量重复代码粒度太细则会直接把整个组件库的使用成本拖垮开发者会绕开组件库自建一套到那时候就真失控了。2.2 设计令牌让颜色和间距从设计稿走向代码设计令牌是设计系统和代码之间的翻译官也是组件化构建的地基。没有令牌体系组件库里的每个组件都得写死具体数值改一次主题色就是一场批量化大工程。令牌的命名要遵循类别-对象-属性-状态的结构尽量语义化不要出现蓝色深一点的蓝这种含糊描述。我常用的令牌结构长这样{ colors: { brand: { primary: #1677ff, hover: #4096ff, active: #0958d9 }, functional: { success: #52c41a, warning: #faad14, danger: #ff4d4f } }, spacing: { xs: 4px, sm: 8px, md: 16px, lg: 24px, xl: 32px }, radius: { sm: 2px, md: 4px, lg: 8px } }在代码层我习惯把令牌转成CSS变量组件里统一引用变量避免任何硬编码:root { --color-brand-primary: #1677ff; --color-functional-danger: #ff4d4f; --spacing-md: 16px; --radius-md: 4px; } .btn-primary { background: var(--color-brand-primary); border-radius: var(--radius-md); padding: 0 var(--spacing-md); }设计侧也需要做同样的事。现在主流设计工具基本都有令牌插件比如Figma里可以用Tokens Studio之类的插件把设计稿里的颜色、字号、间距和代码里的令牌文件打通。设计稿改一个颜色导出JSON前端同步进来全站就跟着变了。这才是真正意义上的设计决策直接传导到代码。注意组件代码里出现硬编码色值是一个红线问题。评审组件时如果看到#fff、rgba(0,0,0,0.1)这类字面量必须打回改成令牌引用否则令牌体系就是个摆设。2.3 组件库的技术选型框架组件、Web组件还是无头组件搭建组件库之前选型是最容易纠结的环节。我梳理了三种主流方案各有各的适用场景方案优点缺点适用场景框架组件库React/Vue组件与业务开发同构心智负担小生态成熟开发效率高被框架绑定跨框架复用难绝大多数团队的首选Web Components原生支持跨框架、跨技术栈复用样式隔离和交互细节处理繁琐调试体验一般需要把组件输出给多种技术栈团队使用无头组件Headless UI逻辑与样式完全分离视觉定制自由度最大团队要自己写样式工作量翻倍有专业设计系统团队、追求极致定制化的组织我的建议很直接除非你有特别硬的多技术栈复用需求否则就别折腾Web Components了。99%的团队直接按主技术栈选一套组件库方案比如React团队就选React组件方案Vue团队就选Vue组件方案把精力省下来打磨组件本身性价比最高。组件化思想在iOS、ROS这些领域也有类似的应用但它们更偏重模块通信和生命周期管理而设计系统组件库更偏重视觉一致性和设计资产联动。所以不要照搬其他领域的组件化实践到UI设计系统里它们的低耦合诉求不一样。3. 规模化应用从一个小团队到全公司3.1 版本管理与升级节奏组件库从第一个组件被接入开始就得定版本管理规则。我推的是语义化版本规范三个数字分别对应主版本号包含破坏性变更比如某个组件的API重写、设计令牌整体改名次版本号新增组件或非破坏性功能比如新加一个时间选择器补丁版本号修bug、微调样式不改变现有使用方式配套的还有固定发布节奏。我建议组件库不要随时改随时发最好是双周或月度固定发版。原因很实际如果每天都有新版本业务团队根本来不及接索性就不升了固定节奏则让业务团队形成每个月中旬统一升级组件库的默契。版本升级最怕的是大版本换代。我在实操中强烈推荐渐进式替换而不是一次性全量迁移。举个例子旧的按钮组件先留着新按钮以新组件名推出去一个页面一个页面替换全部替换完成后再在下个大版本里删掉旧组件。这就像老城区改造一栋楼一栋楼翻新而不是把整片老城区推倒重来风险完全可控。3.2 跨团队协作让组件库活起来很多组件库死在只有设计系统小组的人在更新。组件库想规模化必须把周边团队变成共建者而不是用户。这是我一直在推的几个机制组件贡献机制任何业务团队都可以提PR。业务开发在自己项目里沉淀了一个好用的组件通过规范检查后可以收编进组件库贡献者签上名字。这套机制能让业务团队从使用者变成共建者。Owner制度每个核心组件都指定一个明确的owner负责组件维护、issue响应、变更评审。没有owner的组件会在半年内烂掉这是铁律。定期组件评审会两周一次设计、前端负责人、核心业务方参加对齐新增组件需求和存量组件优化方向。评审会不开协作就会慢慢变成各干各的。除了机制还要定文档底线。组件库里的每个组件必须有示例、属性表、使用场景最好还要写明反模式——也就是什么情况下不要用这个组件。文档不达标的组件宁可不上线。因为一个没有文档的组件三个月后连owner自己都未必记得当初的设计意图。3.3 用数据衡量规模化成效规模化推进过程中最容易被领导问的问题就是设计系统做得到底怎么样。你需要几个硬指标来回答而不能只说我们建了120个组件。我常用的指标有四个指标计算方法说明组件覆盖率业务页面中实际使用组件库控件的数量 / 应使用组件库控件的数量衡量组件库在业务里的渗透程度设计走查问题数每次走查发现的不一致问题数量应呈现持续下降趋势新页面接入平均耗时从设计稿定稿到页面开发上线的时间组件化之后应该明显缩短组件版本健康度运行在最新主版本组件库上的项目比例衡量版本升级节奏是否健康用数据的时候有一个心态要注意指标是拿来发现问题、推动协作的不要变成考核工具。比如发现某个团队组件覆盖率偏低正确反应是去聊是组件能力不足还是文档不清楚而不是批评这个团队不配合。前者会换来真实反馈和组件改进后者只会换来表面配合和实际抵制。4. 实操过程与关键环节4.1 从0到1搭建组件库的完整流程这里给出一套可以直接复制的七步流程每一步的关键输出物都列清楚现状盘点把线上主要页面的控件截图、归档、分类看清现状有多乱做组件排序依据。输出物控件清单和问题清单。定义设计语言明确品牌色、字体、间距、圆角、阴影等基础变量形成第一版令牌。输出物设计令牌表。搭建令牌到代码的通道把令牌导出为JSON转成CSS变量建立设计工具与代码仓库的同步机制。输出物令牌文件仓库。优先开发高频组件按使用频率高、问题多、依赖面广排序先做按钮、输入框、弹窗、表格、表单校验这几个硬骨头。输出物第一批核心组件。搭建组件文档站用Storybook或同类工具建文档站每个组件配上示例、属性表、使用场景。输出物文档站。试点项目验证挑一个合作意愿强、规模适中的业务项目做试点真实跑一遍从设计到开发的完整链路。输出物试点总结和问题清单。复盘与横向推广根据试点反馈迭代组件库再逐步扩展到其他业务线。输出物推广计划。这套流程里最容易偷懒的是第2步和第5步但恰恰是这两步决定组件库能不能活过一年。设计语言没定清楚后面每个组件都要返工文档站没搭好业务团队根本不敢用。我实际带过的一个案例就是一边是博客系统这种相对简单的业务线另一边是农产品在线销售系统这种表单密集、流程复杂的业务线。组件库要满足的是先解决两者共有的高频控件——按钮、表单、列表、弹窗而像商品多规格选择器这种业务特有场景就放到业务组件层单独扩展不进核心组件库。这个边界划定很关键否则核心组件库就会被业务细节淹没。4.2 组件代码落地的关键细节组件库能不能让业务团队真正用得顺手代码层面的细节比想象中更重要。这里说几个我踩过坑之后总结的关键点。主题切换能力。组件里所有样式必须引用令牌对应的CSS变量这样才能支持运行时切换主题。比如要做暗黑模式只需要覆盖一套CSS变量即可[data-themedark] { --color-brand-primary: #1668dc; --color-functional-danger: #d84a4a; --spacing-md: 16px; }Props设计要克制。组件Props应该只暴露语义化属性不要把所有样式细节都摊出来。比如size就应该是small | medium | large三选一而不是让人传高度像素值。如果你发现组件Props越加越多先停下来想想是不是抽象层级出了问题。样式隔离必须做好。无论是CSS Modules还是styled-components一定要保证组件样式不会污染全局。否则一个团队改了组件样式另一个团队的页面跟着变这种幽灵联动会把组件库的信任度直接打到谷底。另外还要考虑按需加载。组件库体积控制不好会让业务首屏加载变得很重。解决思路是保证组件的模块化结构能被tree-shaking正确生效业务用到哪个组件就只打包哪个组件。4.3 Storybook文档驱动的组件开发我强烈推荐用文档驱动的模式来做组件开发。核心思路是组件和文档一起写Storybook就是开发环境和文档站一个组件从出生就有完整的演示样例。具体实践上每个组件我要求至少包含三类Story基础用法、完整状态、边界状态。基础用法展示组件最常规的样子完整状态把hover、focus、disabled、loading这些状态全部列出边界状态展示超长文字、空数据、极端数据等情况。这样做不只是为了文档好看更是在强迫组件设计者考虑完整的状态覆盖。更重要的是Storybook可以接自动化测试。视觉回归测试会截取每次代码变更后的组件截图和基准图对比任何一个像素级的样式变化都会被标记出来。配合交互测试和可访问性检查组件库的每次发版才称得上是有质量保障。我见过太多组件库上线了改一个按钮样式全站按钮布局微变这种事靠人工根本发现不了只能靠自动化。5. 常见问题与排查技巧实录5.1 组件库没人用的死循环我们建了组件库但业务团队不用怎么办这是我在各个团队听到最多的一个问题。典型的死循环是组件库更新慢、文档不全业务团队不信任业务团队不贡献、不提需求组件库更新更慢最后组件库彻底凉掉。破局的方法只有一个贴身服务一两个核心业务团队把组件做成用了就有明显好处的状态。先别想着服务全公司挑一个意愿最强、业务最典型、痛点最清晰的团队花一个月贴身驻场他们用什么组件你就把什么组件做到极致。业务提一个需求你两天内响应他们踩到坑你第一时间修掉。这个业务团队用出了价值自然会在公司里帮你说话其他团队会主动找上门来。别追求完美组件库。完美主义是组件库落地的第一杀手你花三个月打磨10个完美组件不如三周迭代20个够用组件。组件库是在真实业务反馈里长出来的不是关起门来设计出来的。5.2 组件越加越多怎么刹车组件数量失控是另一个常见问题。第一年建了100多个组件第二年发现很多组件长得差不多业务团队已经不知道该选哪个。我的应对方案是建立组件准入和退出机制。新组件进来要过评审评审清单就三条它和现有组件是否有本质差异如果差异只是尺寸或颜色应该通过Props或主题配置解决而不是新增组件。是否已有三个以上业务团队有同类需求如果只有一个团队需要先放到业务组件层不要进核心库。是否满足文档和测试底线不满足的直接打回。退出机制同样重要。组件库要有废弃流程先把待废组件标记为deprecated同时写好迁移说明统计使用量低于阈值后和受影响团队确认时间窗口约定移除版本到下个大版本再正式删除。废弃流程必须走完整不然团队会一直担心我的页面会不会突然坏了。5.3 设计稿和线上产品图纸对不上还有一个高频问题设计稿里用的色值和组件库里的不一样。根因通常是设计稿没有走令牌设计师还是用取色器吸了个看起来差不多的颜色。解法是强制设计侧走令牌。在Figma里把颜色、字号、间距样式全部做成令牌共享样式设计师画图时只能从共享样式里选不允许自定义色值。这样设计稿和组件库就天然对齐。再加上频率为双周的视觉走查每次抽查两个核心页面用组件库为准对照设计稿发现问题记录到评审会里统一解决。把这个环节打通之后设计侧的效率也会跟着起来。设计师不用再为一个按钮的色值反复对比直接从共享样式里拖出来就行。这其实是设计系统组件化被低估的收益它不只提升了前端效率也把设计师从重复劳动里解放出来了。我在实际操盘设计系统组件化的过程中最大的体会是组件库不是一次性工程项目而是一个需要持续运营的过程资产。它和业务的关系更像园丁和花园——你得持续浇水、修剪看着它适应气候慢慢生长不能指望播一次种就年年丰收。早期推进时别追求一次性铺满全公司几十个业务集中火力打好一两个样板战役让团队切身感受到原来页面可以提得这么快、样式可以这么统一后面规模化应用就是顺水推舟的事情。最后再分享一个小技巧做组件库可以先挑一个被吐槽最多的高频组件——通常是Button也可能是Table——把它做到极致再配上一段一目了然的对比图展示用组件库之前 vs 之后。团队尝到甜头组件化的飞轮才会真正转起来。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价