☰
impeccable:让AI生成前端代码视觉还原度无可挑剔的质量层
2026/10/29 23:03:41 网站建设 项目流程

1. 项目缘起:为什么我们需要一个叫“impeccable”的东西

第一次看到“impeccable”这个词,是在一个前端技术群里。有人甩了张截图,说“这玩意儿把设计稿还原度干到了像素级”,配图是一个命令行界面正在跑一段前端代码生成流程。我当时的第一反应是:又一个噱头工具。但仔细看完截图里的输出结果,我沉默了——那个页面布局的精确度,确实有点东西。

“impeccable”这个词本身的意思是“无可挑剔的、完美的”。放在前端设计领域,它指向的是一个非常具体的痛点:AI coding agents 生成的前端代码,往往在功能上能跑通,但在视觉还原度上惨不忍睹。你让一个 AI 帮你写个登录页,它给你整出来的东西能用,但间距是随意的、颜色是拍脑袋的、响应式断点是随缘的。你拿到代码之后还得花大量时间调样式,调到最后发现还不如自己从头写。

这个项目的核心目标,就是解决“AI 生成前端代码的视觉质量不可控”这个问题。它不是一个独立的编辑器,也不是一个设计工具,而是一个嵌入到现有 AI coding agent 工作流中的质量层。你可以把它理解成一个“前端代码的 lint 工具”,但普通 lint 管的是语法和逻辑,impeccable 管的是视觉规范和设计还原度。

适合谁来关注这个东西?三类人:第一类是靠 AI coding agents 干活的前端开发者,你已经在用 Codex CLI、Claude Code 或者其他 agent 工具写代码了,但每次生成完 UI 都要手动擦屁股;第二类是做设计系统或组件库的团队,你们有一套设计规范,但 AI 生成的东西完全不遵守;第三类是对前端自动化质量有要求的独立开发者,你不想在每个项目里重复定义“什么叫做得好”。

我花了大概两周时间把这个项目的思路摸了一遍,又在自己几个实际项目里跑了跑。下面把我理解到的核心设计、实操细节、踩过的坑,完整地分享出来。

2. 核心设计思路拆解:它到底怎么让 AI 写出“无可挑剔”的前端代码

2.1 问题的本质:AI 生成前端代码的“视觉盲区”

要理解 impeccable 的设计,先得搞清楚一个根本问题:为什么 AI coding agents 写前端代码,视觉质量总是差一截?

原因不复杂。当前主流的 AI coding agents,无论是 Codex CLI 还是其他基于大模型的工具,它们的训练数据里,代码的逻辑结构信息远多于视觉设计信息。模型知道flex布局怎么写、grid怎么用、媒体查询的语法是什么,但它不知道“这个卡片的内边距应该是 16px 还是 24px 更好看”,也不知道“这个按钮的圆角用 6px 还是 8px 更符合现代设计语言”。

更关键的是,AI 生成代码时是逐 token 预测的。它写 CSS 的时候,前面写了padding: 16px,后面写margin的时候,它并不会去“看”前面那个 16px 然后决定 margin 应该用多少。它只是在概率上选择一个“看起来合理”的值。这就导致了一个典型现象:同一个组件里,间距值是随机的——有的地方 12px,有的地方 16px,有的地方 20px,完全没有节奏感。

impeccable 的思路不是去重新训练模型,而是在生成之后、交付之前加一层“视觉规范校验与修正”。这个思路很务实,因为重新训练模型成本太高,而且模型的能力边界不是靠一个项目能突破的。但在输出端做约束,是工程上可解的。

2.2 三层架构:约束定义、生成拦截、后处理修正

impeccable 的架构可以拆成三层,我用一个实际场景来说明。

假设你在用某个 CLI 工具让 AI 生成一个 pricing card 组件。你的 prompt 是“生成一个三列定价卡片,包含标题、价格、功能列表和 CTA 按钮”。

第一层:约束定义。impeccable 要求你(或者你的团队)先定义一套“视觉约束”。这不是完整的设计系统,而是一组关键的设计 token 和规则。比如:

  • 间距系统:只允许 4px 的倍数,常用值 8/16/24/32
  • 圆角系统:只允许 4px、8px、12px、16px、9999px(全圆)
  • 颜色系统:主色、辅色、中性色各定义 3-5 个层级
  • 字体系统:字号阶梯、行高比例、字重限制
  • 布局规则:最大宽度、栅格列数、断点定义

这些约束用一份配置文件描述,格式可以是 JSON 或 YAML。impeccable 会读取这份配置,作为后续所有操作的依据。

第二层:生成拦截。当 AI agent 开始生成代码时,impeccable 会介入。它不是在 agent 生成完之后才检查,而是在生成过程中就进行约束。具体做法是:agent 每生成一段 CSS 或样式相关的代码,impeccable 就实时校验——这个padding值在允许的间距系统里吗?这个border-radius是合法的圆角值吗?这个颜色是定义过的吗?

如果发现不合规的值,impeccable 不会直接报错中断,而是给出修正建议并替换。比如 agent 写了padding: 13px,impeccable 会把它替换成最接近的合法值12px或16px,具体选哪个取决于上下文——如果这个元素周围都是 16px 的间距,那就选 16px;如果是一个紧凑的标签,那就选 12px。

第三层:后处理修正。即使有实时拦截,生成结果里还是可能有一些“漏网之鱼”,比如复杂的嵌套布局、动态计算的样式、或者 agent 用了内联样式绕过了检查。impeccable 会在代码生成完成后,对整个输出做一次“视觉审计”。它会解析生成的 HTML/CSS,提取所有视觉相关的属性,然后和约束配置做比对,生成一份“修正报告”。

这份报告不只是告诉你哪里有问题,还会直接给出修正后的代码。你可以选择自动应用,也可以手动 review。我个人的习惯是第一次跑的时候手动看一遍,确认修正逻辑符合预期之后,后续就开自动模式。

2.3 为什么不做成独立工具,而是嵌入现有工作流

这是我在研究这个项目时最欣赏的一个设计决策。市面上有不少“AI 前端生成”的独立工具,你打开一个网页,输入 prompt,它给你生成代码,然后你复制走。这种模式的问题在于:它和你的实际开发流程是割裂的。

你真正写代码的时候,是在自己的编辑器里、用自己的 CLI 工具、跑在自己的项目结构里。如果 impeccable 是一个独立工具,你就得在两个环境之间来回切换,复制粘贴,非常割裂。

impeccable 选择嵌入现有工作流,具体来说,它支持几种集成方式:

  • 作为 CLI 工具的插件:如果你用的是 Codex CLI 或其他支持插件机制的 CLI,impeccable 可以作为一个 hook 挂载进去。agent 生成代码时自动触发校验。
  • 作为编辑器扩展:在 VS Code 或其他编辑器中,impeccable 可以作为一个保存时触发的格式化工具。你写完代码保存,它自动修正视觉规范问题。
  • 作为 CI 流程的一环:在代码提交或合并请求阶段,impeccable 可以跑一次全量审计,确保进入主分支的代码符合视觉规范。

这种“无处不在但不打扰”的设计,让它的使用成本降到了最低。你不需要改变自己的工作习惯,只需要在现有流程里加一个配置。

3. 核心细节解析:约束系统、修正算法与实操要点

3.1 视觉约束配置怎么写才合理

约束配置是 impeccable 的核心输入。配置写得好,修正效果就好;配置写得烂,修正出来的东西可能比原来还丑。我踩过几次坑之后,总结了一套配置原则。

原则一:约束要“紧”但不能“死”。如果你把间距限制到只有 8px 和 16px 两个值,那 AI 生成的东西会非常死板,所有元素要么太挤要么太松。合理的做法是定义一个“阶梯”,比如 4/8/12/16/24/32/48/64,覆盖从紧凑到宽松的常见场景。impeccable 的修正算法会在阶梯里找最接近的值,而不是强制取整到某一个固定值。

原则二:颜色系统要分层。不要只定义“主色 #3B82F6”,而要定义完整的色阶。比如:

colors: primary: 50: "#EFF6FF" 100: "#DBEAFE" 500: "#3B82F6" 600: "#2563EB" 700: "#1D4ED8" neutral: 50: "#F9FAFB" 100: "#F3F4F6" 500: "#6B7280" 900: "#111827"

这样 AI 在生成 hover 状态、disabled 状态、背景色时,有足够的合法值可选,不会因为“只有主色没有浅色”而被迫用 opacity 或者随便编一个颜色。

原则三:布局规则要具体到场景。“最大宽度 1200px”这种规则太笼统。更好的做法是分场景定义:

  • 内容区最大宽度:768px(适合阅读)
  • 卡片容器最大宽度:1200px(适合展示)
  • 全宽区域:100%(适合 hero section)

impeccable 的配置支持这种场景化定义,修正时会根据元素的上下文选择对应的规则。

原则四:留出“例外通道”。有些场景确实需要打破规范,比如品牌特定的渐变、特殊的装饰性元素。配置里可以定义一个exceptions列表,列出允许偏离规范的属性或选择器。这样修正算法遇到这些情况时会跳过,不会把有意的设计“修正”成平庸的默认值。

3.2 修正算法的决策逻辑

impeccable 的修正算法不是简单的“找最近值替换”,它有一套决策逻辑。我通过观察它的输出和阅读部分源码,梳理出了几个关键决策点。

决策点一:间距修正时,参考上下文还是参考全局?假设 agent 写了一个margin-top: 14px。如果只看全局阶梯,最接近的是 12px 或 16px。但 impeccable 会看这个元素周围的间距——如果父容器的 padding 是 16px,相邻元素的 margin 也是 16px,那它会把 14px 修正为 16px,保持节奏一致。如果周围都是 8px 的紧凑布局,那它会修正为 12px。

决策点二:颜色修正时,保持色相还是保持明度?假设 agent 写了一个#3B82F7,而你的主色是#3B82F6。这两个颜色肉眼几乎看不出区别。impeccable 会直接替换为主色。但如果 agent 写了一个#FF5733(橙红色),而你的色板里只有蓝色系,那它不会强行替换,而是会标记为“未定义颜色”,让你决定是加入色板还是修正。

决策点三:布局修正时,改容器还是改子元素?假设一个卡片容器宽度是 1250px,而你的最大宽度规则是 1200px。impeccable 可以选择把容器改成 1200px,也可以选择给容器加max-width: 1200px并保持内部元素不变。它的默认策略是后者——加约束而不是改尺寸,因为改尺寸可能会影响内部元素的布局计算。

决策点四:多个修正方案冲突时怎么选?有时候一个修正会引发另一个问题。比如把 padding 从 14px 改成 16px 后,元素总宽度超出了容器。impeccable 会做一个简单的“影响评估”:如果修正后会导致溢出、换行、错位等明显问题,它会回退到次优方案,或者标记为“需要人工确认”。

3.3 和 AI coding agents 的集成细节

impeccable 和 AI coding agents 的集成,是整个项目里最“工程化”的部分。不同 agent 的集成方式不一样,我分别说一下。

和 Codex CLI 的集成。Codex CLI 支持通过配置文件定义“生成后钩子”。你可以在配置里加一段:

{ "hooks": { "post-generation": [ { "command": "impeccable check --config ./design-constraints.yml --auto-fix", "trigger": "on-file-write", "filePattern": "**/*.{css,scss,tsx,jsx,vue,svelte}" } ] } }

这样每次 Codex CLI 生成或修改了样式相关文件,impeccable 就会自动跑一次检查和修正。修正结果会直接写回文件,agent 后续的操作会基于修正后的代码继续。

和编辑器扩展的集成。如果你不用 CLI 而是用编辑器里的 AI 助手,impeccable 可以作为保存时触发的 formatter。在 VS Code 的settings.json里:

{ "editor.formatOnSave": true, "editor.defaultFormatter": "impeccable.formatter", "impeccable.configPath": "./design-constraints.yml", "impeccable.autoFixLevel": "safe" }

autoFixLevel有三个档位:safe只修正明确违规的值,moderate会做一些上下文相关的调整,aggressive会重写整个样式块。我建议从safe开始,观察一段时间后再考虑升级。

和 CI 流程的集成。在 GitLab CI 或 GitHub Actions 里加一个 job:

visual-audit: stage: test script: - npx impeccable audit --config ./design-constraints.yml --report ./audit-report.json artifacts: paths: - audit-report.json only: - merge_requests

这个 job 不会自动修正代码,而是生成一份审计报告。你可以在合并请求的评论里看到哪些文件有视觉规范问题,决定是否要求作者修正。

注意:CI 里跑 impeccable 时,建议只做审计不做自动修正。自动修正应该发生在开发阶段,而不是合并阶段。合并阶段的自动修正会让代码审查变得困难,因为审查者看到的代码和实际合并的代码不一致。

4. 实操过程:从零搭建一个 impeccable 工作流

4.1 环境准备与安装

impeccable 本身是一个 Node.js 工具,安装方式取决于你用什么包管理器。我习惯用 pnpm,因为它的依赖解析更快,而且对 monorepo 支持更好。

pnpm add -D impeccable

如果你用的是 npm 或 yarn,对应的命令是:

npm install --save-dev impeccable # 或 yarn add --dev impeccable

安装完成后,你需要初始化配置文件。impeccable 提供了一个交互式初始化命令:

npx impeccable init

这个命令会问你几个问题:你的项目用的是什么框架(React/Vue/Svelte/原生)、你的样式方案是什么(CSS Modules/Tailwind/CSS-in-JS/原生 CSS)、你有没有现成的设计 token 文件。根据你的回答,它会生成一份初始的design-constraints.yml。

我建议不要完全依赖自动生成的配置,而是把它作为一个起点,然后手动调整。自动生成的配置通常比较保守,约束不够具体。

4.2 配置文件的完整示例与参数说明

下面是我在一个实际项目中使用的配置,经过脱敏处理,但结构和参数值都是真实的。

version: "1.0" project: name: "my-app" framework: "react" styling: "css-modules" spacing: unit: "px" scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96] contextRules: - selector: "button, input, select" preferred: [8, 12, 16] - selector: "card, section, article" preferred: [16, 24, 32] - selector: "h1, h2, h3" preferred: [24, 32, 48] radius: scale: [0, 4, 8, 12, 16, 24, 9999] defaults: button: 8 card: 12 input: 8 modal: 16 colors: primary: 50: "#EFF6FF" 100: "#DBEAFE" 200: "#BFDBFE" 500: "#3B82F6" 600: "#2563EB" 700: "#1D4ED8" neutral: 0: "#FFFFFF" 50: "#F9FAFB" 100: "#F3F4F6" 200: "#E5E7EB" 500: "#6B7280" 700: "#374151" 900: "#111827" semantic: success: "#10B981" warning: "#F59E0B" error: "#EF4444" typography: fontFamily: sans: "Inter, system-ui, sans-serif" mono: "JetBrains Mono, monospace" scale: xs: { size: 12, lineHeight: 16, weight: 400 } sm: { size: 14, lineHeight: 20, weight: 400 } base: { size: 16, lineHeight: 24, weight: 400 } lg: { size: 18, lineHeight: 28, weight: 400 } xl: { size: 20, lineHeight: 28, weight: 500 } "2xl": { size: 24, lineHeight: 32, weight: 600 } "3xl": { size: 30, lineHeight: 36, weight: 700 } layout: maxWidth: content: 768 container: 1200 wide: 1440 breakpoints: sm: 640 md: 768 lg: 1024 xl: 1280 exceptions: - selector: ".brand-gradient" properties: ["background", "background-image"] - selector: ".hero-title" properties: ["font-size", "letter-spacing"]

几个关键参数说明:

spacing.contextRules是上下文相关的间距规则。它告诉 impeccable,当修正按钮的 padding 时,优先从[8, 12, 16]里选,而不是从完整的 scale 里选。这样修正出来的结果更符合组件类型的惯例。

radius.defaults定义了常见组件的默认圆角。如果 agent 生成一个按钮但没写圆角,impeccable 会补上 8px。如果写了 6px,会修正为 8px。

typography.scale里的lineHeight和weight是强约束。如果 agent 写了一个 16px 字号但行高是 20px,impeccable 会修正为 24px,因为 base 字号对应的行高是 24。

exceptions是例外通道。.brand-gradient的背景属性不会被修正,因为品牌渐变是刻意设计的,不应该被规范约束。

4.3 跑一次完整的生成-修正流程

我用一个实际案例来演示整个流程。假设我要生成一个 pricing card 组件,prompt 是:“生成一个三列定价卡片,每列包含套餐名称、价格、功能列表和 CTA 按钮,风格现代简洁。”

第一步:agent 生成原始代码。我用 Codex CLI 跑这个 prompt,它生成了一段 JSX 和对应的 CSS Module。原始 CSS 里有一些明显的问题:

.card { padding: 22px; border-radius: 10px; background: #f8f9fa; } .title { font-size: 19px; margin-bottom: 14px; } .price { font-size: 34px; color: #3b82f7; } .feature { padding: 7px 0; font-size: 15px; } .cta { padding: 11px 22px; border-radius: 7px; background: #3b82f6; }

第二步:impeccable 自动修正。保存文件时触发 impeccable,它根据配置做了以下修正:

  • .card的padding: 22px→24px(最接近的合法值,且 card 的 preferred 包含 24)
  • .card的border-radius: 10px→12px(card 默认圆角是 12)
  • .card的background: #f8f9fa→#F9FAFB(neutral-50 的合法值)
  • .title的font-size: 19px→18px(typography scale 里的 lg)
  • .title的margin-bottom: 14px→16px(最接近的合法间距)
  • .price的font-size: 34px→30px(3xl 是最大的合法字号)
  • .price的color: #3b82f7→#3B82F6(primary-500)
  • .feature的padding: 7px 0→8px 0(最接近的合法值)
  • .feature的font-size: 15px→14px(sm 是 14px)
  • .cta的padding: 11px 22px→12px 24px(button 的 preferred 间距)
  • .cta的border-radius: 7px→8px(button 默认圆角)
  • .cta的background: #3b82f6→#3B82F6(大小写规范化)

第三步:人工 review 修正结果。修正后的代码在视觉上明显更“整齐”了。间距有了节奏感,颜色统一了,字号也符合阶梯。但有一个地方我手动调整了:.price的字号从 34px 改成 30px 后,视觉冲击力弱了一些。我在配置的exceptions里加了一条:

- selector: ".price" properties: ["font-size"]

这样下次修正时,.price的字号就不会被强制拉到 30px,我可以手动写 36px 或 40px 来保持视觉重点。

4.4 在团队协作中落地 impeccable

个人项目里用 impeccable 很简单,但团队协作场景下有一些额外要考虑的事情。

配置文件的归属。design-constraints.yml应该放在项目根目录,和.eslintrc、tsconfig.json放在一起,纳入版本控制。这样所有团队成员用的是同一套约束。

和设计团队的对接。如果你们有专门的设计师,约束配置应该由设计师和前端共同维护。设计师定义 token 和规则,前端负责翻译成 impeccable 的配置格式。我见过一些团队把 Figma 的 design tokens 导出成 JSON,然后写一个脚本转换成 impeccable 的 YAML,这样设计和代码的同步是自动化的。

渐进式推行。不要一上来就在整个项目里开aggressive模式。先在新建的组件里用,观察一段时间,确认修正效果符合预期后,再逐步扩大到存量代码。存量代码的修正建议单独开一个分支,不要和功能开发混在一起。

代码审查的调整。用了 impeccable 之后,代码审查的重点会发生变化。以前审查者要花时间看“这个间距是不是对的”“这个颜色是不是符合规范”,现在这些由 impeccable 保证了。审查者可以把精力放在逻辑、可访问性、性能这些 impeccable 管不了的地方。

5. 常见问题与排查技巧实录

5.1 修正后布局错乱了怎么办

这是最常见的问题。原因通常是修正改变了元素的尺寸,导致原本刚好放得下的布局溢出了。

排查思路:先看 impeccable 的修正日志,找到哪些属性被改了。然后对比修正前后的渲染结果,定位是哪个元素的尺寸变化导致了错乱。

解决方案:如果是间距修正导致的,可以在配置里给这个组件单独定义更宽松的 preferred 值。比如一个横向排列的标签组,原本每个标签 padding 是 6px 10px,修正成 8px 12px 后总宽度超了。可以在配置里加:

spacing: contextRules: - selector: ".tag-group .tag" preferred: [4, 6, 8]

让修正算法在这个场景下选择更小的值。

如果是圆角或字号修正导致的,通常不会引起布局错乱,除非是用了em单位。impeccable 默认只修正px单位的值,如果你用了em或rem,它不会动。但如果你混用了px和em,修正px值可能会破坏比例关系。建议在配置里统一单位:

spacing: unit: "px" enforceUnit: true

这样 impeccable 会把所有间距值统一成px,避免单位混用的问题。

5.2 修正算法“过度修正”怎么控制

有时候 impeccable 会把一些有意的设计选择当成错误来修正。比如你故意用了一个 14px 的字号来区分层级,但配置里没有 14px 这个档位,它就会给你拉到 12px 或 16px。

控制手段一:细化 typography scale。如果你的设计里确实需要 14px 这个字号,就把它加到 scale 里。不要为了“规范”而牺牲设计的灵活性。

控制手段二:使用 exceptions。对于特定的选择器,可以完全跳过修正:

exceptions: - selector: ".custom-badge" properties: ["*"] # 跳过所有属性

控制手段三:调整 autoFixLevel。从aggressive降到moderate或safe。safe模式只修正“明确违规”的值,比如不在 scale 里的间距、不在色板里的颜色。moderate会做一些上下文推断。aggressive会重写整个样式块,适合新项目从零开始。

5.3 和 Tailwind 的配合问题

Tailwind 用户可能会觉得 impeccable 和 Tailwind 的约束系统有重叠。确实有重叠,但不冲突。

Tailwind 的约束是在编写时生效的——你只能从预定义的 class 里选。但 AI agent 生成 Tailwind 代码时,它可能会用 arbitrary values,比如p-[13px]、text-[15px]、bg-[#3b82f7]。这些 arbitrary values 绕过了 Tailwind 的约束系统。

impeccable 可以专门针对 Tailwind 的 arbitrary values 做修正。在配置里加:

tailwind: enabled: true fixArbitraryValues: true preferThemeValues: true

这样 impeccable 会把p-[13px]修正为p-3(12px)或p-4(16px),把text-[15px]修正为text-sm(14px),把bg-[#3b82f7]修正为bg-blue-500。

注意:Tailwind 的修正需要 impeccable 能解析你的tailwind.config.js,确保 theme 里的值和 impeccable 的配置一致。如果两边不一致,修正结果可能不符合预期。

5.4 性能问题:大项目里跑 impeccable 太慢

impeccable 默认会扫描所有样式相关文件。在大型项目里,这可能会很慢。

优化手段一:增量扫描。配置里开启增量模式:

performance: incremental: true cacheDir: ".impeccable-cache"

这样 impeccable 只扫描上次运行后修改过的文件。

优化手段二:限定文件范围。如果你只关心src/components下的文件,可以配置:

include: - "src/components/**/*.{css,scss,tsx,jsx}" exclude: - "**/*.test.*" - "**/*.stories.*" - "node_modules/**"

优化手段三:在 CI 里只跑审计不跑修正。审计比修正快很多,因为不需要写回文件。CI 里跑审计,开发阶段跑修正,这样 CI 的耗时不会显著增加。

5.5 常见问题速查表

问题现象可能原因排查方法解决方案
修正后布局溢出间距或字号被改大查看修正日志,对比前后尺寸调整 contextRules 的 preferred 值
有意的设计被修正配置里没有对应的合法值检查修正日志中被改的属性加入 exceptions 或扩展 scale
Tailwind arbitrary values 没被修正未开启 Tailwind 支持检查配置里 tailwind.enabled开启并确保 theme 同步
修正速度慢全量扫描大项目查看扫描的文件数量开启增量模式,限定 include 范围
颜色被修正成不想要的值色板定义不完整检查修正后的颜色值扩展色板,加入更多中间色阶
修正结果和设计稿不一致配置和设计 token 不同步对比配置和 Figma tokens建立自动同步脚本
某些文件没被扫描到include/exclude 配置问题检查文件路径是否匹配调整 glob 模式
修正后代码格式乱了和 Prettier 冲突查看文件保存后的格式调整执行顺序,先 impeccable 后 Prettier

6. 我个人的使用体会与几个实用建议

用了这段时间,我最大的感受是:impeccable 解决的不是“AI 能不能写前端代码”的问题,而是“AI 写的前端代码能不能直接用”的问题。这两个问题之间的差距,在实际项目里可能是 30% 到 50% 的返工时间。

几个我觉得比较实用的建议。第一,从新项目开始用,不要一上来就改造存量项目。新项目的约束少,修正效果容易验证,团队接受度也高。第二,配置要迭代,不要指望一次写对。我自己的配置改了七八版,每次都是遇到具体问题之后调整的。第三,不要追求 100% 的修正率,有些修正确实需要人工判断,impeccable 的 exceptions 机制就是为这种情况准备的。第四,和 Prettier 配合使用时注意顺序,先跑 impeccable 再跑 Prettier,否则 Prettier 的格式化可能会把 impeccable 的修正结果打乱。

还有一个我踩过的坑:一开始我把autoFixLevel设成了aggressive,结果 impeccable 把我写的一些自定义动画的transition属性也改了,因为动画的时长值不在我的间距 scale 里。后来我把transition和animation相关的属性加到了 exceptions 里,问题就解决了。所以如果你用了 CSS 动画,记得在配置里排除相关属性。

这个项目后续还可以扩展的方向是:和设计工具的深度集成,比如直接从 Figma 的 design tokens 生成 impeccable 配置;以及更智能的上下文推断,比如根据组件的类型(按钮、卡片、表单)自动选择最合适的约束规则,而不是依赖手动配置的 contextRules。不过就目前的能力来说,它已经能覆盖大部分日常开发场景了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询