news 2026/9/1 9:45:28

DESIGN.md pre-commit钩子实战:让坏设计令牌提交不了仓库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DESIGN.md pre-commit钩子实战:让坏设计令牌提交不了仓库

DESIGN.md pre-commit钩子实战:让坏设计令牌提交不了仓库

【免费下载链接】design.mdA format specification for describing a visual identity to coding agents. DESIGN.md gives agents a persistent, structured understanding of a design system.项目地址: https://gitcode.com/GitHub_Trending/de/design.md

DESIGN.md 是一个面向 AI 编码代理的开源设计系统格式规范,配套的官方 CLI 可对设计令牌(颜色、字体、间距、圆角等 Design Token)执行 lint、diff、export 三类检查。本文面向新手,带你用 3 步把lint接入 git 的 pre-commit 钩子,让坏设计令牌在提交的瞬间就被拦截,永远进不了仓库。

为什么 pre-commit 是设计令牌的最佳守门员

坏设计令牌通常从这几类路径混进仓库:

  • 断掉的引用:组件引用了{colors.brand}这类根本不存在的令牌
  • 对比度不足:文字/背景色组合低于 WCAG AA 的 4.5:1 标准
  • 键名拼写错误:把colors:写成colours:,整组令牌被静默丢弃

靠肉眼审查很难发现这些问题,而 DESIGN.md CLI 内置了 11 条 lint 规则可以自动捕获。关键在于它的退出码lint发现 error 级问题时退出码为1,否则为0——这正是 git 钩子"放行 / 拦截"提交所需要的行为。

核心实现见 packages/cli/src/commands/lint.ts。

三步配置:最快的 pre-commit 钩子接入方法

第 1 步:本地安装 CLI

npm install -D @google/design.md

Windows(PowerShell)用户请给包名加引号,避免@被 shell 特殊处理:

npm install -D "@google/design.md"

第 2 步:编写 pre-commit 钩子脚本

在仓库根目录创建.git/hooks/pre-commit文件(需赋予可执行权限),内容如下:

#!/bin/sh # 仅当本次提交包含 DESIGN.md 时才执行检查 if git diff --cached --name-only | grep -q '^DESIGN\.md$'; then npx designmd lint DESIGN.md fi

说明:

  • designmd是官方提供的别名命令,可避免 Windows 下.md后缀与 Markdown 文件关联冲突,跨平台行为一致
  • grep那一行保证提交其他文件时钩子零开销
  • lint 失败(退出码 1)时 git 会自动中止提交,你看到的就是带findingssummary的结构化 JSON 报告

第 3 步:提交验证

git commit -m "update: 调整主按钮配色"

一切正常则直接提交;若有 error 级问题被拦截,按 JSON 中path指出的位置修复后重新提交即可 ✅

💡 如果项目已使用 lint-staged 等文件级检查工具,也可以把同一条命令挂到*.md规则里,效果等价。

哪些坏设计令牌会被拦截

linter 内置 11 条规则,完整清单见 packages/cli/src/linter/linter/rules/index.ts。日常最常触发的前几条:

规则级别检查内容
broken-referror令牌引用未指向任何已定义令牌
missing-primarywarning定义了颜色却缺少primary主色
contrast-ratiowarning组件文字/背景对比度低于 4.5:1
orphaned-tokenswarning颜色令牌定义了却从未被组件引用
section-orderwarningMarkdown 章节顺序不符合规范
unknown-keywarning顶层键名疑似拼写错误(如colours

⚠️ 注意:默认只有error级发现(如broken-ref)会阻断提交,warning 仅作提示。若希望 warning 也拦截,可在钩子中解析--format json输出的summary.warnings字段,自行决定是否exit 1

进阶:用 diff 命令拦住设计"回退"

lint解决"当前文件是否有错",而diff解决"新版是否比旧版更差"。当后一个文件的 error 或 warning 数量多于前一个文件时,命令退出码为1,回归判定逻辑见 packages/cli/src/commands/diff.ts:

npx designmd diff DESIGN.md DESIGN-v2.md

在钩子里把暂存区版本的 DESIGN.md 与git show HEAD:DESIGN.md取出的旧版本做 diff,就能连"质量悄悄降级"的设计系统改动也一并拦住。

延伸阅读

  • 完整格式规范:docs/spec.md
  • CLI 命令与规则参考:README.md
  • 设计理念(为什么散文比令牌更重要):PHILOSOPHY.md
  • 完整示例,含令牌文件与 Tailwind 导出配置:examples/atmospheric-glass/DESIGN.md、examples/atmospheric-glass/tailwind.config.js

常见问题

Q:为什么不放进 CI,非要 pre-commit?CI 是兜底防线,但反馈发生在推送之后;pre-commit 把反馈压缩到几秒内,修复成本最低。两者可以并存。

Q:钩子会不会拖慢日常提交?不会。脚本只在暂存区包含DESIGN.md时才运行 lint,其他提交几乎零开销。

Q:Windows 上行为一致吗?一致,但建议使用designmd别名;PowerShell 下@.md后缀都容易被系统误解析,详见 README.md 的 Getting Started 章节。

【免费下载链接】design.mdA format specification for describing a visual identity to coding agents. DESIGN.md gives agents a persistent, structured understanding of a design system.项目地址: https://gitcode.com/GitHub_Trending/de/design.md

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 9:44:15

Shortcircuit XT主题自定义教程:内置6大主题与JSON主题创建方法

Shortcircuit XT主题自定义教程:内置6大主题与JSON主题创建方法 【免费下载链接】shortcircuit-xt Download the beta here : https://github.com/surge-synthesizer/shortcircuit-xt/releases/tag/Nightly 项目地址: https://gitcode.com/GitHub_Trending/sh/sho…

作者头像 李华
网站建设 2026/9/1 9:42:50

用友畅捷通升级迁移服务厂家怎么选

先看结论:这类服务不适合只看名次 用友畅捷通升级迁移服务没有可核验的统一第三方参考标准,也很难靠单一维度判断适配度。更实用的方式,是把候选服务商放进同一套事实标准里比较:现状诊断、数据迁移、接口对接、上线切换和持续支持…

作者头像 李华
网站建设 2026/9/1 9:41:29

用Skill统一图片生成流程:告别重复调参,让AI稳定出图

GitHub 上一周最热闹的讨论里,Skill 这个词出现的频率比单个新模型还要高。尤其是图片生成方向,不少开发者把“提示词模板 风格参考 参数规则 成图检查”打包成一个可复用的 Skill,放进 Claude Code、Codex、OpenCode 这类 Agent 工具里&a…

作者头像 李华
网站建设 2026/9/1 9:41:23

OpenClaw AI Agent 运行时框架部署与业务接入全指南

最近 AI Agent 开源社区的节奏明显变了。OpenClaw 的 v2026.8.1 版本还没有正式发布,仓库里的合并请求数量就已经刷新了项目历史纪录。作为一个长期关注 Agent 框架落地的开发者,我能明显感觉到这轮版本周期的热度不太一样:安装教程、部署踩坑…

作者头像 李华
网站建设 2026/9/1 9:40:18

1Panel 批量操作:一条命令库,下发到整组主机

1Panel 批量操作:一条命令库,下发到整组主机 【免费下载链接】1Panel 🔥 1Panel is a modern, open-source Linux server management panel and a lightweight AI management platform. 项目地址: https://gitcode.com/GitHub_Trending/1p/…

作者头像 李华