1. 项目缘起与核心定位
1.1 一个被名字耽误的实用工具
第一次看到 "impeccable" 这个词,很多人会愣一下——这到底是个什么项目?名字听起来像某个高端品牌或者设计奖项,跟技术工具似乎沾不上边。但如果你最近在关注 AI coding agents 这个赛道,尤其是在前端设计工作流里折腾过 CLI 工具链,那你大概率已经在某个技术社区或者 GitHub 趋势榜上见过它了。
impeccable 本质上是一个面向 AI 编程代理的前端设计质量校验层。它做的事情可以用一句话概括:当你的 AI coding agent 生成了一段前端代码之后,impeccable 负责检查这段代码在视觉呈现、交互逻辑、可访问性、响应式布局等维度上是否达到了"无可挑剔"的标准。它不是一个代码生成工具,也不是一个 UI 框架,而是一个质量守门员。
这个定位非常关键。现在市面上 AI 写代码的工具已经多如牛毛,从各种 CLI 代理到浏览器扩展,从终端里的 codex cli 到编辑器里的 trae cli,大家都在解决"让 AI 帮你写代码"的问题。但写出来的代码质量参差不齐,尤其是前端部分——AI 经常生成看起来能跑但细节一塌糊涂的界面:间距不一致、颜色对比度不达标、移动端直接崩掉、键盘导航完全不可用。impeccable 就是冲着这些痛点来的。
1.2 为什么前端设计需要专门的校验层
前端开发和后端开发有一个本质区别:后端代码的正确性可以通过测试用例来验证,输入输出明确,逻辑对不对跑一遍就知道。但前端代码的"正确性"包含大量主观和半主观的判断——这个间距是 16px 还是 24px 更合适?这个按钮的 hover 状态过渡时间 200ms 还是 300ms 更自然?这个表单的错误提示放在字段下方还是右侧更符合用户直觉?
AI coding agents 在处理这类问题时,倾向于生成"平均正确"的代码——也就是说,它生成的界面不会太离谱,但也不会特别精致。它可能会用 16px 的 padding 和 16px 的 margin,因为这是最常见的值;它可能会用默认的蓝色作为主色调,因为这是最安全的选色。但一个真正 impeccable 的界面,需要在一致性、节奏感、层次感上都有讲究。
impeccable 的核心价值就在于,它把那些"有经验的 frontend design 工程师会下意识检查的东西"变成了可自动化的规则。比如:
- 所有间距是否遵循同一个比例系统(4px 基准还是 8px 基准)
- 文字层级是否清晰(标题、正文、辅助文字的字号和字重是否有明确区分)
- 颜色对比度是否满足 WCAG 标准(尤其是正文文字和背景的对比度)
- 交互元素是否有完整的焦点状态、悬停状态、激活状态
- 响应式断点是否覆盖了主流设备尺寸
- 动画和过渡是否尊重用户的减少动态偏好设置
这些规则单独拿出来都不复杂,但要让 AI agent 在每次生成代码时都自动遵守,就需要一个专门的校验层来兜底。impeccable 就是这个兜底机制。
1.3 适合谁来用
如果你是一个独立开发者,用 AI 辅助写前端代码,但经常在细节上翻车,那 impeccable 很适合你。如果你是一个团队的技术负责人,团队里有多个人在用不同的 AI coding agents,你需要一个统一的质量标准来约束输出,impeccable 也能派上用场。如果你是一个对设计有追求但不想手动调每一个像素的人,impeccable 可以帮你把精力集中在创意上,把重复性的质量检查交给工具。
但如果你完全不做前端,或者你的项目对 UI 质量没有任何要求(比如内部工具,能用就行),那 impeccable 对你来说可能有点过度设计。工具的价值取决于场景,这一点需要先想清楚。
2. 核心机制拆解:impeccable 到底怎么工作
2.1 与 AI coding agents 的集成方式
impeccable 最核心的设计决策是:它不试图取代任何现有的 AI coding agent,而是作为一个后处理层嵌入到现有工作流中。这个选择非常聪明,因为 AI coding agent 这个赛道已经足够拥挤了,从 codex cli 到各种浏览器扩展,每个工具都有自己的用户群和使用习惯。如果 impeccable 要求用户换工具,那推广成本会高得离谱。
它的集成方式主要有三种:
第一种是 CLI 模式。你可以在终端里直接运行 impeccable 命令,它会扫描你指定的目录或者文件,输出一份质量报告。这种方式适合已经用惯了命令行工具的开发者,也方便集成到 CI/CD 流程里。比如你可以在 git pre-commit hook 里加一行 impeccable check,这样每次提交前都会自动检查前端代码的质量。
第二种是浏览器扩展模式。这个模式更直观,你打开一个本地开发服务器上的页面,impeccable 的浏览器扩展会实时分析页面上的元素,把有问题的部分高亮出来,并在侧边栏显示具体的改进建议。这种方式适合在开发过程中随时检查,所见即所得。
第三种是作为 AI agent 的插件或中间件。如果你用的是支持插件机制的 AI coding agent,比如某些 CLI 工具允许你在生成代码后执行自定义脚本,那你可以把 impeccable 挂载上去,让它在每次代码生成后自动运行检查,并把问题反馈给 AI 让它重新生成。这种方式最自动化,但配置起来也最复杂。
2.2 检查规则的分类与优先级
impeccable 的检查规则不是一锅粥,而是有明确的分类和优先级。根据我的使用经验,它大致分为四个层级:
第一层是硬性错误。这些是必须修复的问题,比如颜色对比度不满足 WCAG AA 标准、交互元素缺少键盘焦点状态、图片缺少 alt 属性。这些问题不修复的话,会直接影响可用性和可访问性,属于"不修不行"的级别。
第二层是一致性问题。比如间距值不在同一个比例系统里、圆角半径混用了多个不同的值、阴影效果不统一。这些问题不会导致功能故障,但会让界面看起来"不专业",属于"应该修"的级别。
第三层是优化建议。比如某个动画的持续时间可以更短一些、某个按钮的点击区域可以更大一些、某段文字的行高可以调整。这些问题属于"改了更好,不改也能用"的级别。
第四层是风格偏好。比如是否使用某种特定的设计语言、是否遵循某个设计系统的规范。这些问题没有绝对的对错,impeccable 会给出建议但不会强制。
这个分层设计的好处是,你可以根据项目阶段和团队要求,灵活选择检查的严格程度。在原型阶段,你可能只关心第一层;在准备上线时,你会把前两层都打开;在追求极致体验时,四层全开。
2.3 规则引擎的技术实现思路
impeccable 的规则引擎底层依赖的是 AST(抽象语法树)分析和 CSS 计算样式提取。对于 HTML 结构,它会解析 DOM 树,检查元素的嵌套关系、属性完整性、语义化标签使用情况。对于 CSS,它会提取每个元素的计算样式,然后跟预定义的规则进行比对。
这里有一个技术难点:很多设计问题不是单个元素的问题,而是元素之间的关系问题。比如"间距一致性"这个规则,需要收集页面上所有元素的 margin 和 padding 值,然后分析这些值是否落在同一个比例系统里。如果页面上有 8px、16px、24px、32px 这些值,那没问题,它们是 8 的倍数;但如果出现了 10px、15px、22px 这种值,就会被标记为不一致。
另一个难点是响应式检查。impeccable 需要模拟不同的视口宽度,然后检查布局是否按照预期变化。这涉及到对媒体查询的解析和对 flex/grid 布局的模拟计算。根据我的实测,它在处理复杂 grid 布局时偶尔会有误报,但整体准确率还是可以接受的。
3. 实操流程:从安装到跑通第一条检查
3.1 环境准备与安装
impeccable 的安装方式取决于你选择的集成模式。如果你走 CLI 路线,最直接的方式是通过包管理器安装。假设你的开发环境里已经有 Node.js 和 npm,那安装命令大概是这样的:
npm install -g impeccable-cli安装完成后,你可以运行impeccable --version来确认安装成功。如果提示命令找不到,那大概率是全局安装路径没有加到 PATH 里,需要手动配置一下。
如果你走浏览器扩展路线,那就去对应浏览器的扩展商店搜索 impeccable,找到官方发布的版本安装即可。安装后浏览器工具栏上会出现一个图标,点击可以打开检查面板。
如果你走 AI agent 插件路线,那就需要根据你使用的具体 agent 来配置。不同的 agent 插件机制不一样,有的支持 webhook,有的支持本地脚本调用,有的需要写一个适配层。这部分没有统一的标准答案,需要根据实际情况来。
注意:安装 CLI 版本时,建议使用 LTS 版本的 Node.js,避免因为 Node 版本过新或过旧导致依赖安装失败。我在 Node 22 上遇到过 sharp 依赖编译失败的问题,切换到 Node 20 LTS 后解决。
3.2 配置文件的结构与关键参数
impeccable 的行为通过一个配置文件来控制,默认文件名是impeccable.config.json,放在项目根目录下。这个文件的结构大致如下:
{ "rules": { "contrast": { "level": "AA", "enabled": true }, "spacing": { "base": 8, "tolerance": 0, "enabled": true }, "typography": { "scaleRatio": 1.25, "enabled": true }, "interaction": { "requireFocusState": true, "enabled": true }, "responsive": { "breakpoints": [375, 768, 1024, 1440], "enabled": true } }, "ignore": ["node_modules/**", "dist/**", "*.min.css"], "output": { "format": "table", "verbose": false } }几个关键参数需要重点说明:
spacing.base定义了间距的基准值。如果你设为 8,那所有间距值都应该是 8 的倍数。这个值的选择取决于你的设计系统,8 是最常见的,也有团队用 4 或者 6。tolerance是容差,设为 0 表示严格匹配,设为 1 表示允许 1px 的偏差。
typography.scaleRatio定义了字号的比例关系。1.25 意味着每个层级的字号是上一层的 1.25 倍。这个比例决定了文字层级的视觉节奏,太大显得突兀,太小显得平淡。
responsive.breakpoints定义了需要检查的视口宽度。这些值应该覆盖你的目标用户的主流设备。375 是手机,768 是平板,1024 是小笔记本,1440 是桌面显示器。
3.3 跑通第一次检查
配置好之后,在项目根目录下运行:
impeccable check ./src这个命令会扫描./src目录下的所有 HTML、CSS、JSX、Vue 文件,提取其中的样式信息,然后按照配置的规则进行检查。输出结果默认是一个表格,列出每个问题的文件位置、问题类型、严重程度和建议的修复方式。
我第一次跑的时候,输出了一百多条问题,大部分是间距不一致和颜色对比度不足。当时我的第一反应是"这也太严格了吧",但仔细看了一遍之后发现,确实有很多细节是我平时没注意到的。比如我用了一个#767676的灰色作为辅助文字颜色,在白色背景上的对比度是 4.48:1,刚好低于 WCAG AA 要求的 4.5:1。这种问题肉眼根本看不出来,但 impeccable 能精确地指出来。
3.4 把检查集成到开发流程里
跑通第一次检查只是开始,真正有价值的是把检查变成日常开发流程的一部分。我自己的做法是在 package.json 里加一个脚本:
{ "scripts": { "lint:design": "impeccable check ./src --format json --output report.json", "precommit": "npm run lint:design && node scripts/check-design-report.js" } }然后在 git pre-commit hook 里调用npm run precommit。这样每次提交前都会自动检查,如果有关键问题就直接阻止提交。check-design-report.js是我自己写的一个小脚本,用来解析 impeccable 输出的 JSON 报告,如果发现第一层级的硬性错误就退出码设为 1,阻止提交。
这个流程跑顺了之后,前端代码的质量明显提升了一个档次。以前需要人工 review 才能发现的问题,现在自动化就拦住了。
4. 规则详解与参数调优实战
4.1 间距一致性检查的底层逻辑
间距一致性是 impeccable 最核心的检查项之一,也是最能体现"设计系统思维"的地方。它的工作原理是:收集页面上所有元素的 margin、padding、gap 值,然后判断这些值是否落在同一个数学比例系统里。
假设你的基准值是 8px,那允许的值就是 8、16、24、32、40、48……如果出现了 10px、15px、22px 这种值,就会被标记。但这里有一个细节:边框宽度、字体大小、行高这些属性不参与间距检查,因为它们有自己独立的比例系统。
我在实际使用中发现,这个规则最容易触发的地方是第三方组件库。很多组件库内部用了自己的间距值,跟你的设计系统不一致。这时候你有两个选择:要么在配置里把第三方组件库的路径加到 ignore 列表里,要么用 CSS 变量覆盖组件库的默认值。我倾向于后者,因为覆盖之后整个页面的间距系统还是统一的。
还有一个经验:tolerance参数不要设得太松。我试过设成 2,结果 10px 和 12px 都被认为是合法的,因为 10 跟 8 差 2,12 跟 8 差 4 但跟 16 差 4……等等,这个逻辑其实有点绕。简单说就是,容差越大,检查越松,但太松了就失去了检查的意义。我的建议是保持 0 或者最多 1。
4.2 颜色对比度检查的实操细节
颜色对比度检查看起来简单——不就是算两个颜色的亮度比吗?但实际操作中有几个坑。
第一个坑是半透明颜色。如果文字颜色是rgba(0, 0, 0, 0.6),背景是白色,那实际渲染出来的颜色是#666666左右,对比度是 5.74:1,满足 AA 标准。但如果背景不是纯白,而是有渐变或者图片,那对比度计算就复杂了。impeccable 的处理方式是取背景色的平均值来计算,这在大多数情况下是合理的,但在极端情况下可能不准。
第二个坑是字体大小和字重的影响。WCAG 标准规定,大号文字(18pt 以上或 14pt 加粗)的对比度要求可以放宽到 3:1,普通文字要求 4.5:1。impeccable 会自动判断文字是否属于"大号",然后应用对应的标准。但"大号"的判断依赖于字体大小的计算,如果页面用了 rem 或者 em 单位,需要先转换成 px 才能判断。
第三个坑是动态颜色。如果颜色是通过 JavaScript 动态设置的,impeccable 在静态扫描时可能拿不到最终值。这种情况下,浏览器扩展模式比 CLI 模式更有优势,因为它是在页面渲染后进行分析的。
实操心得:我一般会把对比度检查的级别设为 AA,而不是 AAA。AAA 要求普通文字对比度达到 7:1,这个标准对设计限制太大了,很多品牌色根本达不到。AA 的 4.5:1 是一个比较平衡的标准,既能保证可读性,又不会把设计逼死。
4.3 响应式断点检查的配置策略
响应式检查是 impeccable 里配置最复杂的部分,因为它需要模拟不同视口下的布局变化。配置的核心是breakpoints数组,你需要列出所有需要检查的视口宽度。
我的建议是不要只列标准断点,还要列一些"边缘情况"。比如你的设计系统里定义了 768px 作为平板断点,那除了检查 768px 本身,还应该检查 767px 和 769px,看看断点切换时有没有布局跳动或者元素重叠。这种边缘情况在实际使用中很容易出问题,但人工测试很难覆盖到。
另一个经验是,响应式检查最好配合截图对比来用。impeccable 可以输出每个断点下的布局分析报告,但报告是文字形式的,不够直观。我自己的做法是用 Puppeteer 写了一个脚本,在每个断点下截一张图,然后跟 impeccable 的报告对照着看。这样既能发现布局问题,又能看到实际的视觉效果。
4.4 交互状态检查的覆盖范围
交互状态检查是很多团队容易忽略的部分,但恰恰是影响用户体验的关键。impeccable 会检查每个可交互元素(按钮、链接、输入框、下拉菜单等)是否具备以下状态:
- 默认状态
- 悬停状态(hover)
- 焦点状态(focus)
- 激活状态(active)
- 禁用状态(disabled,如果适用)
其中焦点状态是最容易被忽略的。很多开发者会把outline: none加得到处都是,因为默认的焦点轮廓不好看,但去掉之后又没有提供替代的焦点样式,导致键盘用户完全不知道当前焦点在哪里。impeccable 会把这种情况标记为硬性错误。
我在实际项目中遇到过一个典型案例:一个用 AI 生成的表单页面,所有输入框都去掉了焦点轮廓,但加了自定义的边框颜色变化。问题是,边框颜色变化在深色模式下几乎看不出来,而且没有足够的对比度。impeccable 检查出来后,我改成了同时改变边框颜色和添加一个外发光效果,这样在浅色和深色模式下都能清晰识别。
5. 与主流 AI Coding Agents 的配合方式
5.1 在 CLI 工作流中嵌入检查环节
现在很多开发者用 CLI 工具来驱动 AI 写代码,比如在终端里跟 AI agent 对话,让它生成组件代码,然后手动复制到项目里。这种工作流的问题是,AI 生成的代码质量完全靠运气,有时候很好,有时候一堆细节问题。
把 impeccable 嵌入这个工作流的方式很简单:在 AI 生成代码后,不要直接复制到项目里,而是先保存到一个临时文件,然后跑一遍 impeccable 检查。如果检查通过,再复制到项目里;如果不通过,把 impeccable 的报告反馈给 AI,让它重新生成。
我自己的做法是写了一个 shell 函数:
ai-gen() { local prompt="$1" local output_file="/tmp/ai-output.tsx" # 调用 AI agent 生成代码,输出到临时文件 my-ai-agent generate "$prompt" > "$output_file" # 跑 impeccable 检查 impeccable check "$output_file" --format json > /tmp/impeccable-report.json # 如果有关键问题,反馈给 AI 重新生成 if grep -q '"severity": "error"' /tmp/impeccable-report.json; then echo "发现问题,正在让 AI 修复..." my-ai-agent fix "$output_file" /tmp/impeccable-report.json > "$output_file" fi # 输出最终代码 cat "$output_file" }这个流程跑顺了之后,AI 生成代码的可用率从大概 60% 提升到了 85% 以上。剩下的 15% 主要是逻辑问题,不是设计问题,impeccable 管不了。
5.2 浏览器扩展模式下的实时反馈
浏览器扩展模式适合在开发过程中使用。你打开本地开发服务器上的页面,扩展会自动分析当前页面的设计质量,并在侧边栏显示问题列表。点击某个问题,页面上对应的元素会高亮显示,方便你定位。
这个模式最大的优势是实时性。你改一行 CSS,保存,页面刷新,扩展立刻重新分析,你马上就能看到问题是否修复了。这种即时反馈循环对提升开发效率很有帮助。
但浏览器扩展模式也有局限。它只能分析当前渲染出来的页面,如果某个组件在特定条件下才显示(比如点击某个按钮后才出现的弹窗),那扩展在初始状态下是看不到的。你需要手动触发那个条件,让弹窗显示出来,然后扩展才能分析。
注意:浏览器扩展模式在分析大型页面时可能会有性能问题。如果你的页面有几千个 DOM 节点,扩展的分析可能会卡顿几秒钟。这种情况下建议用 CLI 模式做全量检查,用扩展模式做局部检查。
5.3 作为 AI Agent 插件的自动化闭环
最理想的集成方式是让 impeccable 成为 AI agent 的一个插件,在每次代码生成后自动运行,发现问题自动反馈,AI 自动修复,形成一个闭环。但这个方式的实现难度取决于你用的 AI agent 是否支持插件机制。
如果支持 webhook,那你可以部署一个简单的服务,接收 agent 的代码生成事件,跑 impeccable 检查,然后把结果回调给 agent。如果不支持 webhook,但支持本地脚本调用,那你可以写一个包装脚本,在 agent 生成代码后自动执行检查。
我试过用这种方式配合某个 CLI agent 工作,整体体验很流畅,但配置过程花了大概半天时间。主要时间花在调试 agent 的插件接口上,因为文档不太完善,很多细节需要自己摸索。
6. 常见问题与排查技巧实录
6.1 检查结果误报的处理方法
impeccable 不是完美的,它会有误报。常见的误报场景包括:
- 动态计算的样式值被静态分析误判
- 第三方组件库的内部样式被当成项目代码检查
- 复杂的 CSS 选择器优先级导致计算样式提取错误
- 伪元素和伪类的样式没有被正确关联到宿主元素
处理误报的方法有三种。第一种是调整配置,把误报的规则关掉或者放宽阈值。第二种是使用 ignore 注释,在代码里加一行/* impeccable-disable-next-line */,让 impeccable 跳过下一行的检查。第三种是提交 issue 给 impeccable 的维护者,如果是通用问题,他们通常会在后续版本里修复。
我个人的原则是:如果误报率超过 10%,那就说明配置有问题,需要重新审视规则设置;如果误报率在 5% 以下,那就可以接受,用 ignore 注释处理个别情况即可。
6.2 性能优化:大型项目的检查策略
在大型项目上跑全量 impeccable 检查可能会很慢。我试过一个有 500 多个组件的项目,全量检查跑了将近 3 分钟。这个时间在 CI 里还可以接受,但在本地开发时就很烦人了。
优化策略有几个。第一是增量检查,只检查最近修改的文件。impeccable 支持--since参数,可以指定只检查某个 git commit 之后修改的文件。第二是并行检查,把项目拆成多个子目录,同时跑多个 impeccable 进程。第三是缓存,把上次检查的结果缓存起来,只重新检查有变化的文件。
我自己的做法是在本地开发时用增量检查,在 CI 里用全量检查。这样本地开发体验流畅,CI 又能保证全量覆盖。
6.3 与现有 Lint 工具的冲突解决
很多项目已经有 ESLint、Stylelint 等工具了,再加上 impeccable,可能会有规则冲突。比如 ESLint 的某个规则要求某种写法,impeccable 的某个规则要求另一种写法,两边打架。
解决冲突的原则是:功能性的规则以 ESLint 为准,设计性的规则以 impeccable 为准。因为 ESLint 更擅长检查代码逻辑和语法问题,impeccable 更擅长检查设计质量问题。如果实在有冲突,可以在 impeccable 配置里把冲突的规则关掉,或者在 ESLint 配置里加 override。
6.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 检查结果为空 | 配置文件路径不对 | 检查impeccable.config.json是否在项目根目录 | 移动配置文件到正确位置 |
| 大量误报 | 规则阈值太严格 | 查看误报的具体规则 | 调整阈值或加 ignore 注释 |
| 检查速度慢 | 项目文件太多 | 用--since参数做增量检查 | 配置增量检查或并行检查 |
| 浏览器扩展不工作 | 页面有 CSP 限制 | 打开开发者工具看 console 报错 | 在开发环境禁用 CSP 或调整扩展权限 |
| 颜色对比度计算不准 | 背景是渐变或图片 | 检查背景元素的样式 | 手动指定背景色或忽略该规则 |
| 响应式检查漏报 | 断点配置不完整 | 检查 breakpoints 数组 | 补充边缘断点值 |
7. 我踩过的坑与实战经验
7.1 不要一开始就追求全绿
我刚开始用 impeccable 的时候,看到一百多条问题,强迫症发作,想一次性全部修完。结果花了整整两天时间,改了几百个文件,最后发现有些改动反而让设计变得更差了。比如为了满足间距一致性,我把一些精心调整过的间距值改成了机械的 8 的倍数,结果视觉节奏感反而没了。
后来我学乖了,分批处理。第一周只修硬性错误,第二周修一致性问题,第三周再看优化建议。而且每次修改后都跑一遍视觉回归测试,确保没有引入新的问题。这个节奏虽然慢,但质量更可控。
7.2 规则要跟着设计系统走
impeccable 的默认规则是一套通用标准,但每个团队的设计系统不一样。如果你直接套用默认规则,可能会发现很多"问题"其实是你设计系统里有意为之的。
比如你的设计系统里定义了 6px 作为小间距,但 impeccable 默认的基准是 8px,那所有 6px 的间距都会被标记为问题。这时候你需要把spacing.base改成 6,或者把 6 加到允许的值列表里。
我的建议是,在引入 impeccable 之前,先梳理一遍你的设计系统,把间距比例、字号比例、颜色规范都整理清楚,然后根据这些规范来配置 impeccable。这样检查结果才是有意义的。
7.3 团队推广需要循序渐进
如果你在团队里推广 impeccable,不要一上来就强制所有人使用。先找一两个愿意尝试的同事试点,收集反馈,调整配置,等流程跑顺了再逐步推广。
推广的时候,重点不是强调"这个工具能找出多少问题",而是强调"这个工具能帮你省多少时间"。开发者对"被检查"这件事天然有抵触心理,但如果你告诉他们"用了这个工具,你就不用再手动调间距和对比度了",接受度会高很多。
7.4 定期回顾检查报告
impeccable 的检查报告不只是用来修问题的,还可以用来发现趋势。比如你发现最近一个月"间距不一致"的问题越来越多,那可能说明团队里有人在用新的组件库,或者设计系统本身需要更新了。
我养成了一个习惯,每个月把 impeccable 的报告导出来,按问题类型统计一下,看看哪些类型的问题在增加,哪些在减少。这个数据对改进开发流程很有参考价值。
8. 后续扩展与个性化定制
8.1 自定义规则的编写方法
impeccable 支持自定义规则,你可以根据团队的特殊需求写自己的检查逻辑。自定义规则的编写方式是写一个 JavaScript 模块,导出一个函数,接收元素信息和样式信息,返回检查结果。
比如你想检查所有按钮的圆角半径是否一致,可以写一个这样的规则:
module.exports = { name: 'button-radius-consistency', severity: 'warning', check: function(element, styles) { if (element.tagName === 'BUTTON') { const radius = styles.borderRadius; if (radius !== '8px' && radius !== '0px') { return { message: `按钮圆角半径 ${radius} 不符合规范(应为 8px 或 0px)`, element: element, suggestion: '将 border-radius 改为 8px 或 0px' }; } } return null; } };然后把规则文件路径加到配置文件里,impeccable 就会在检查时加载这个规则。
8.2 与设计工具的联动
impeccable 的检查结果可以导出为 JSON 格式,这为与其他设计工具联动提供了可能。比如你可以写一个脚本,把 impeccable 的报告转换成 Figma 插件能识别的格式,然后在 Figma 里直接标注出有问题的设计稿。
这个联动目前还没有现成的方案,需要自己开发。但思路是通的:impeccable 输出问题列表,每个问题包含元素选择器和问题描述,Figma 插件根据选择器定位到对应的图层,然后添加标注。这个流程跑通后,设计和开发之间的沟通效率会提升很多。
8.3 在 CI/CD 中的进阶用法
除了基本的检查,impeccable 还可以在 CI/CD 里做更多事情。比如:
- 生成质量趋势图,展示每次提交的设计质量变化
- 设置质量门禁,如果硬性错误超过阈值就阻止合并
- 自动生成修复建议的 PR,让开发者一键采纳
- 与视觉回归测试结合,检查设计改动是否引入了意外的问题
这些进阶用法需要一定的脚本开发能力,但一旦搭建起来,对团队的质量保障会有很大帮助。我目前实现了质量门禁和趋势图,自动修复 PR 还在探索中。
8.4 未来可能的发展方向
从我个人使用体验来看,impeccable 目前最需要改进的地方是误报率和性能。误报率虽然不高,但在大型项目上累积起来还是很烦人的。性能方面,全量检查的速度还有优化空间。
另外,我希望能看到更多与 AI agent 的深度集成。现在的集成方式还是偏手动,如果能让 impeccable 成为 AI agent 的默认检查层,每次生成代码都自动过一遍,那就真正实现了"AI 写代码,impeccable 保质量"的闭环。
还有一个有趣的方向是让 impeccable 学习项目的设计模式。比如它可以通过分析项目里已有的代码,自动推断出项目的间距基准、颜色规范、字号比例,然后基于这些推断来检查新代码。这样就不需要手动配置了,上手成本会低很多。
我在实际使用 impeccable 的过程中,最大的体会是:它不是一个"设置好就不用管"的工具,而是需要持续调优和磨合的。每个项目的设计系统不一样,每个团队的工作流不一样,你需要根据实际情况来调整配置和集成方式。但一旦磨合好了,它带来的质量提升是实实在在的。我现在已经离不开它了,每次写前端代码都会下意识地想"这个间距值 impeccable 会不会报错",这种意识本身就已经在提升代码质量了。