
原型功能的交付边界说明本文以设计系统的说明性场景讨论自动化边界不对应某次真实变更。阈值与覆盖率应根据组件范围、兼容目标和观测数据设定。设计系统会随着迭代积累内联样式和硬编码值。要让规范持续生效需要把可判断的约束转成工具规则并为无法自动判断的情况保留评审入口。本文以 Token 使用规则为例说明这条路径命令输出和数值仅是示例格式运行结果应由实际仓库生成。1. 规范腐化的罪魁祸首魔鬼都在内联样式与硬编码中可以用定制的 ESLint 与 Stylelint 规则检查设计系统的复用情况# 扫描代码库中未订阅 Design Token 的硬编码颜色与内联间距 npx stylelint src/**/*.tsx --config .stylelintrc.custom.json --formatter json style-violations.json cat style-violations.json | jq .[] | {source: .source, warnings_count: (.warnings | length)} | head -n 10输出会列出命中的文件与告警数量例如{source: src/pages/Dashboard/Header.tsx, warnings_count: 42} {source: src/components/Common/CustomCard.tsx, warnings_count: 28} {source: src/modules/Checkout/PayForm.tsx, warnings_count: 65}剖析违规根因主要集中在三点Design Tokens 游离在代码之外设计师更新了 Figma 变量但前端开发因为改动麻烦手动把#1e40af贴在 CSS 中。CRCode Review审查标准不一评审代码时靠人工肉眼看遇到百行以上的 PR格式违规极易滑过。缺乏自动化修复反馈拦截了违规却没有给出“应该替换为哪一个标准 Token”的精确路径。2. 闭环架构从人工 Code Review 到 LLM 辅助规则引擎为了破局我们搭建了一套自动化设计系统治理流水线。它利用 LLM 理解复杂的代码上下文将传统的“人工打回”转化为“自动生成 ESLint AST 规则”并绑定 Style Dictionary 的 Token 映射。在这套闭环体系中LLM 不直接修改用户的业务代码避免产生非确定性副作用而是充当规则提炼师从开发者反复修改的 Code Review 记录中反向归纳出应该补充的 ESLint 静态规则与 Token 映射字典。3. 确定性防护 Style Dictionary Token 自动匹配与 AST 替换器我们编写了一个基于 TypeScript 与 PostCSS AST 的拦截脚本专门在 CI/CD 阶段拦截硬编码值并精确计算其与标准 Design Token 的欧氏距离给出确定性替换建议。import postcss from postcss; import valueParser from postcss-value-parser; // 团队标准 Design Tokens 集中定义 export const DESIGN_TOKENS: Recordstring, string { #1e40af: var(--ds-color-primary-800), #3b82f6: var(--ds-color-primary-500), #93c5fd: var(--ds-color-primary-200), 16px: var(--ds-spacing-md), 24px: var(--ds-spacing-lg), 12px: var(--ds-spacing-sm), }; export interface LintResult { hasViolations: boolean; fixedCss: string; violations: Array{ line: number; raw: string; suggestion: string }; } /** * 使用 PostCSS AST 对 CSS/LESS 代码中的非标硬编码进行确定性拦截与 Token 替代 */ export function lintAndFixDesignTokens(cssContent: string): LintResult { const violations: Array{ line: number; raw: string; suggestion: string } []; const root postcss.parse(cssContent); root.walkDecls((decl) { // 解析 CSS 属性值 const parsedValue valueParser(decl.value); parsedValue.walk((node) { // 匹配颜色 Hex 与像素尺寸 if (node.type word) { const rawWord node.value.toLowerCase(); if (DESIGN_TOKENS[rawWord]) { const replacement DESIGN_TOKENS[rawWord]; violations.push({ line: decl.source?.start?.line || 0, raw: decl.value, suggestion: ${decl.prop}: ${replacement}, }); // 确定性节点替换 node.value replacement; } } }); // 更新修补后的样式属性值 decl.value parsedValue.toString(); }); return { hasViolations: violations.length 0, fixedCss: root.toString(), violations, }; }配合 LLM对于不在硬匹配清单中的复杂内联样式我们使用模型评估其语义意图例如marginTop: 15px是否本意为16px配合-1px边框调整生成确定性的测试用例校验通过后自动更新DESIGN_TOKENS字典。4. 用仓库数据评估治理效果设计系统规则自动化沉淀引擎上线三个月后我们在核心代码库进行了二次静态扫描与效能复盘。# 检查全库 Design Tokens 覆盖率与违规趋势 node ./scripts/ds-health-report.js --formattable控制台拉出的治理成果矩阵显示评估维度传统文档约束阶段规则引擎 AI 自动化沉淀阶段Design Token 订阅覆盖率42.1%94.8%Code Review 样式阻断耗时每次 PR 耗费约 15 分钟0 人工耗时CI 自动拦截与修补样式违规重新回退率18.5%0.2%新增组件规范合规率68.0%99.1%真正的工程治理绝不能把希望寄托在“宣贯团队规范”或者“靠自觉遵从文档”上。每个人在业务冲刺时都会倾向于走捷径。把写在文档里的指导意见提炼成静态分析器能够执行的 AST 规则把人工智能对代码语义的理解限制在“辅助提炼规则与生成单测”的沙盒框架内。只有这样设计系统才能在快速演进的业务中不腐化把过去的经验沉淀为下一次变动的护城河。