1. 为什么 CSS 规范总在“写完就忘”这一步翻车
前端团队做 CSS 规范,最常见的结局是:规范文档写得漂漂亮亮,.stylelintrc也提交进了仓库,但真正写业务的时候没人记得住属性顺序、引号风格、十六进制大小写。等到 Code Review 才发现一堆红色波浪线,改起来又费时间。
Stylelint 本身能解决“检查”这件事,但它解决不了“写的时候就提醒”和“AI 生成代码后自动对齐规范”这两件事。现在很多团队用 Cline、Cursor 这类 AI 编码工具写样式,AI 生成的 CSS 往往能跑,但属性顺序、单位大小写、颜色写法跟团队规范对不上,人工再改一遍等于白干。
这篇要做的,是把 Stylelint 接进 VS Code + Cline 的 AI 编码链路里,同时用 TaoToken 统一模型调用的 Key 和 API 通道,让 AI 写出来的样式在保存那一刻就被 Stylelint 校验、自动修复、错误定位。目标很直接:给你一份能直接复制的settings.json骨架,再走一遍可复现的验证流程,确认规则真的命中了。
适合谁看:正在推前端规范工程、需要把 CSS 规范落到工具链里的前端同学;已经在用 Cline 写代码、但样式规范还没接进 AI 工作流的团队;以及被stylelint和prettier规则打架折腾过的人。
下面按“环境准备 → TaoToken 配置 → Stylelint 配置 → 保存即校验 → 报错排查”的顺序走,每一步都有可复制的配置和验证动作。
2. TaoToken 前置:统一 Key 与 API 通道
在把 Stylelint 接进 AI 编码工具链之前,先解决一个前置问题:Cline 这类工具需要调用大模型,如果每个成员各自配 Key、各自填 Base URL,团队里就会出现“有人能跑、有人报 401”的经典问题。TaoToken 在这里的作用是提供统一的 API 通道和 Key 管理,让 Cline 的模型调用走同一个入口。
你需要先拿到一个可用的 Key。进入控制台创建 API Key,路径是 console 页面,创建后复制保存,后面填进 Cline 的配置里。模型对话入口可以用来先验证 Key 是否可用,不用一上来就配到编辑器里。
Cline 的模型配置里,Provider 选择兼容 OpenAI 协议的方式,Base URL 填https://taotoken.net/api,API Key 填刚才创建的那一串。这样 Cline 在生成 CSS、SCSS、Vue 样式块的时候,走的就是同一条通道,团队里换人、换机器只需要换 Key,不用改一堆本地配置。
这里有个容易踩的点:Base URL 不要带多余的路径后缀,Cline 会自己拼接/v1/chat/completions这类端点。填成https://taotoken.net/api/v1反而可能拼出重复路径。填https://taotoken.net/api就行。
如果你后面要做长期编码、Agent 自动改代码,可以了解下 Coding Plan,它更适合持续性的编码任务;只是验证模型通不通,用模型对话页面就够。接入细节和参数说明在接入文档里有,遇到 401/404 先翻文档比瞎试快。
3. 可复制配置:settings.json 骨架 + Stylelint 规则
这一节是核心,分三块:VS Code 的settings.json、Stylelint 的.stylelintrc.cjs、以及package.json的脚本命令。三块配完,保存即校验的链路才算通。
3.1 安装依赖
先装 Stylelint 相关依赖。用 pnpm 的话直接:
pnpm add stylelint stylelint-config-html stylelint-config-recommended-scss stylelint-config-recommended-vue stylelint-config-standard stylelint-config-standard-scss stylelint-config-recess-order postcss postcss-html stylelint-config-prettier -D如果你用 npm,最新版 Stylelint 可能和其他包有 peer 依赖冲突,加上--legacy-peer-deps或--force:
npm install stylelint stylelint-config-html stylelint-config-recommended-scss stylelint-config-recommended-vue stylelint-config-standard stylelint-config-standard-scss stylelint-config-recess-order postcss postcss-html stylelint-config-prettier -D --legacy-peer-deps各包的作用简单对照一下:
| 包名 | 作用 |
|---|---|
| stylelint | 核心库 |
| stylelint-config-standard | 通用 CSS 约定规则 |
| stylelint-config-standard-scss | SCSS 扩展规则 |
| stylelint-config-recommended-vue | Vue 文件推荐规则 |
| stylelint-config-recommended-scss | SCSS 推荐规则 |
| stylelint-config-recess-order | 属性书写顺序 |
| stylelint-config-html | HTML/Vue template 样式解析 |
| postcss-html | 解析 HTML 类语法 |
| stylelint-config-prettier | 关闭与 Prettier 冲突的规则 |
3.2 VS Code settings.json 骨架
在项目根目录的.vscode/settings.json里加入下面这段。这是“保存即校验”的关键,source.fixAll.stylelint设为explicit表示保存时执行可自动修复的规则:
{ "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.stylelint": "explicit" }, "stylelint.enable": true, "stylelint.validate": [ "css", "less", "postcss", "scss", "vue", "sass", "html" ], "files.eol": "\n" }stylelint.validate里把vue和html加上,是因为很多项目的样式写在单文件组件的<style>块里,不声明的话插件不会去校验这些块。files.eol设成\n是为了避免 Windows 和 Mac 协作时行尾符不一致触发无关报错。
3.3 .stylelintrc.cjs 规则配置
在项目根目录建.stylelintrc.cjs:
// @see: https://stylelint.io module.exports = { root: true, extends: [ "stylelint-config-standard", "stylelint-config-html/vue", "stylelint-config-standard-scss", "stylelint-config-recommended-vue/scss", "stylelint-config-recess-order", "stylelint-config-prettier", ], overrides: [ { files: ["**/*.{vue,html}"], customSyntax: "postcss-html", }, ], rules: { "function-url-quotes": "always", "string-quotes": "double", "unit-case": "lower", "color-hex-case": "lower", "color-hex-length": "long", "rule-empty-line-before": "never", "block-opening-brace-space-before": "always", "font-family-no-missing-generic-family-keyword": null, "scss/at-import-partial-extension": null, "property-no-unknown": null, "no-empty-source": null, "selector-class-pattern": null, "value-no-vendor-prefix": null, "no-descending-specificity": null, "value-keyword-case": null, "selector-pseudo-class-no-unknown": [ true, { ignorePseudoClasses: ["global", "v-deep", "deep"], }, ], }, ignoreFiles: ["**/*.js", "**/*.jsx", "**/*.tsx", "**/*.ts"], };几个规则说明一下,避免你照抄后不知道为什么:
color-hex-length设成long,意思是#fff要写成#ffffff。有些团队喜欢短写,这里按长写来,你按团队约定改就行。
selector-pseudo-class-no-unknown里忽略global、v-deep、deep,是因为 Vue 的深度选择器和 CSS Modules 的:global会被 Stylelint 当成未知伪类,不忽略会一直报错。
value-keyword-case设成null,是为了解决 SCSS 里用v-bind时大写单词被误报的问题。
3.4 package.json 脚本
在package.json的scripts里加一条:
{ "scripts": { "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/" } }--fix会自动修复能修的,--cache加缓存位置是为了第二次跑得快。跑:
npm run lint:stylelint4. 验证请求:保存即校验与规则命中
配置写完不算完,得验证规则真的生效。分两步:编辑器里的实时校验,和命令行脚本的批量校验。
4.1 编辑器实时校验
新建一个测试文件test.css,故意写一段不符合规范的样式:
.test { color: #FFF; margin: 0px; background: url(./a.png); display: block; width: 100px; }保存后,如果配置生效,你会看到:
#FFF被标红,因为color-hex-case要求小写、color-hex-length要求长写,应该改成#ffffff。
0px被标红,因为unit-case和长度单位规则,零值通常不带单位。
url(./a.png)被标红,因为function-url-quotes设成always,URL 必须加引号。
display和width的顺序可能被标红,因为stylelint-config-recess-order要求属性按约定顺序排列。
把鼠标悬停在红色波浪线上,能看到具体规则名和期望值,这就是“错误定位”。点快速修复或者保存时自动修复,能改的会被改掉。
4.2 命令行批量校验
跑npm run lint:stylelint,终端会输出所有不符合规范的文件和行号。如果全部能自动修复,跑完再看文件已经变了;不能自动修复的会列出来让你手动处理。
这里有个实测经验:属性顺序(recess-order)和关键字优先级这两类问题,--fix大部分能自动排好。之前一整片红色波浪线的文件,跑完脚本后属性顺序被重排,颜色和单位也被修正,剩下的基本是选择器命名这类需要人工判断的。
4.3 和 Cline 的联动验证
在 Cline 里让它生成一段样式,比如“写一个卡片组件的 SCSS,包含 hover 效果”。生成后保存,观察 Stylelint 是否对 AI 生成的代码报错。如果 AI 写的属性顺序、颜色写法不符合规范,保存时会被自动修复或标红。这一步验证的是“AI 生成 → 保存 → 校验”整条链路通了。
如果 Cline 调用模型时报错,先回到 TaoToken 的模型对话页面确认 Key 可用,再检查 Cline 里的 Base URL 是不是https://taotoken.net/api。通道和校验是两件事,分开排查会快很多。
5. 本篇常见错排查
5.1 PowerShell 报“禁止运行脚本”
跑npm run lint:stylelint时如果报:
...powershell.exe -Command pnpm run lint:stylelint 已经终止,退出代码:1或者提示pnpm.ps1 因为在此系统上禁止运行脚本,这是 Windows 执行策略限制,不是 Stylelint 的问题。用管理员模式打开 VS Code 再跑,或者按系统策略调整脚本执行权限。这类报错和 CSS 规范本身无关,别在.stylelintrc里找原因。
5.2 改了 settings.json 不生效
VS Code 的settings.json改完后,如果当前窗口还开着,有些配置不会立即重载。把 VS Code 全部关掉再重新打开,否则可能弹警告并自动关闭自身。这是插件加载机制导致的,不是配置写错了。
5.3 Vue 文件里的样式不校验
检查stylelint.validate里有没有加vue,以及.stylelintrc.cjs的overrides里有没有针对**/*.{vue,html}配customSyntax: "postcss-html"。两个都配了还不校验,看下 VS Code 右下角 Stylelint 插件是不是被禁用了。
5.4 规则和 Prettier 打架
如果保存时 Prettier 和 Stylelint 互相改来改去,确认extends里有没有stylelint-config-prettier,它的作用就是关掉和 Prettier 冲突的规则。顺序上放在最后,覆盖前面的规则。
5.5 依赖版本冲突
npm 安装时报 peer 依赖冲突,用--legacy-peer-deps或--force。pnpm 一般不会有这个问题。装完跑不起来,先看 Stylelint 主版本和其他 config 包是否匹配,版本差太多会出现规则名不存在之类的报错。
6. 把校验接进 AI 编码链路之后
Stylelint 单独用,解决的是“检查”;接进 VS Code + Cline 之后,解决的是“写的时候就对齐”。AI 生成的样式不再需要人工逐行改属性顺序和颜色写法,保存那一刻自动修复,剩下的红色波浪线才是真正需要人判断的。
配置层面,settings.json负责触发时机,.stylelintrc.cjs负责规则,package.json脚本负责批量兜底,三者缺一不可。TaoToken 在这里承担的是模型调用的统一通道,让 Cline 的 Key 和 Base URL 不用每人配一遍。
如果你还在把 CSS 规范停留在文档阶段,建议先按这篇的骨架跑一遍测试文件,确认红色波浪线真的出现、--fix真的能改,再推到团队仓库。规则命中验证过了,规范才算落地。需要长期用 AI 做编码和 Agent 任务的,可以看下 Coding Plan;接入参数和报错对照在接入文档里;只想先确认模型通道通不通,用模型对话页面发一条消息最快。