
1. 为什么 2024 年还要单独折腾 stylelint如果你正在用 VS Code 写 Vue3 Vite 项目大概率已经习惯了 ESLint 帮你管 JS/TS 的格式和潜在错误。但样式部分呢.vue文件里那一大段style scoped langscssESLint 基本管不到团队里有人写color: #FFF;、有人写color:#fff、有人属性顺序随心所欲代码 review 时全靠肉眼盯时间一长就崩。stylelint 就是补这块短板的工具它能校验 CSS/SCSS/Less也能钻进.vue和.html的style标签里做检查配合 VS Code 插件还能保存即修复。2024 年这一版比较关键的几个变化是stylelint 已经到 v16 系列stylelint-config-prettier这类兼容插件在 v15 之后基本不需要了stylelint-config-standard-vue也拆出了/scss子路径配置写法和两年前差别不小。这篇就按「VS Code Vue3 Vite stylelint 2024」这条线把插件、.stylelintrc、settings.json、npm 脚本、CI 校验、常见报错一次讲清楚。同时我会把 TaoToken 作为统一 Key/API 通道在工具链里怎么接一次说明白——它不参与样式校验本身但你在配 lint、跑脚本、接 AI 辅助时Key 管理可以统一走它省得每个工具各配一套。适合谁看正在搭 Vue3 Vite 脚手架、想加样式规范的前端团队里负责工程化配置的人以及被 stylelint 版本升级搞到头大、想找一份能直接抄的 2024 配置的人。2. TaoToken 统一 Key 接入工具链里只配一次先说清楚定位避免误会stylelint 是本地 lint 工具它不需要联网、不需要 Key你装完依赖就能跑。TaoToken 在这里的角色是「统一 Key/API 通道」——当你的工具链里还有别的需要调模型能力的环节比如 AI 辅助改样式、代码审查脚本、Coding Agent可以把 Key 收敛到一处管理而不是散落在各个.env里。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 基址https://taotoken.net/api操作路径大致是这样进控制台创建 Key然后在需要调用的工具里把 base URL 指向https://taotoken.net/apiKey 用刚创建的那一串。这样你项目里跟模型相关的调用都走同一个出口换 Key、看用量、做限额都在一个地方。几个常用 deep link按需取模型对话体验https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentCoding Plan长期编码/Agent 场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentClaude Code / Anthropic 相关https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注意stylelint 的配置和运行完全在本地不需要任何 Key。TaoToken 只在你项目里存在「需要调模型」的环节时才用得上别把它和 lint 工具混为一谈。3. 可复制配置从装依赖到 settings.json 骨架3.1 安装依赖2024 版本组合在 Vue3 Vite 项目根目录执行。这套组合覆盖了标准规则、SCSS、Vue 单文件组件、属性排序npm i -D stylelint stylelint-config-standard stylelint-config-standard-scss stylelint-config-standard-vue stylelint-scss postcss-html postcss-scss stylelint-config-recess-order逐个说下作用方便你按需删减包名作用stylelint核心stylelint-config-standard官方标准规则集stylelint-config-standard-scssSCSS 语法规则stylelint-config-standard-vue校验.vue里的样式块stylelint-scssSCSS 专属规则插件postcss-html让 stylelint 能解析.vue/.html里的stylepostcss-scssSCSS 自定义语法解析stylelint-config-recess-orderCSS 属性书写顺序规则3.2.stylelintrc.js完整骨架根目录新建.stylelintrc.js。注意 2024 年 stylelint v16 默认走 ESM项目package.json里如果有type: module用export default否则用module.exports。下面给 ESM 版本// .stylelintrc.js // see: https://stylelint.io export default { plugins: [stylelint-scss, stylelint-order], extends: [ stylelint-config-standard, stylelint-config-standard-scss, stylelint-config-standard-vue/scss, stylelint-config-recess-order, ], overrides: [ { files: [**/*.{vue,html}], customSyntax: postcss-html, }, ], rules: { // 允许空样式块避免 style scoped 暂时为空时报错 block-no-empty: null, // 颜色值统一小写团队约定 color-hex-case: lower, // 禁止在选择器里用未知伪类 selector-pseudo-class-no-unknown: [ true, { ignorePseudoClasses: [deep, global] }, ], }, }这里有两个坑要提前说第一stylelint-config-prettier在 stylelint v15 之后已经不需要了官方标准规则集自己处理了和 Prettier 的冲突别再装它装了反而可能报重复规则。第二selector-pseudo-class-no-unknown这条一定要加ignorePseudoClasses: [deep, global]否则 Vue3 的:deep()、:global()会被判成未知伪类满屏红。3.3 VS Codesettings.json骨架打开命令面板Ctrl/Cmd Shift P输入Preferences: Open User Settings (JSON)或者直接改工作区的.vscode/settings.json。推荐放工作区团队共享{ stylelint.enable: true, stylelint.validate: [css, less, postcss, scss, sass, vue], editor.codeActionsOnSave: { source.fixAll.stylelint: explicit }, css.validate: false, scss.validate: false, less.validate: false }关键点解释stylelint.validate里必须显式加上vue否则插件不会去检查.vue文件里的样式块这是最常见的「配了没反应」原因。editor.codeActionsOnSave用explicit而不是true是 VS Code 新版本的要求true会提示弃用。把css.validate、scss.validate、less.validate关掉是因为 VS Code 内置的校验会和 stylelint 打架出现重复波浪线。注意如果你从设置界面点进 stylelint 配置VS Code 有时会自动生成一个空的stylelint.config字段。这个空配置优先级很高会直接覆盖你根目录的.stylelintrc.js导致规则全部失效。进settings.json搜stylelint.config有就删掉。3.4 npm 脚本与 CI 校验在package.json的scripts里加两条{ scripts: { lint:style: stylelint \src/**/*.{css,scss,vue}\, lint:style:fix: stylelint \src/**/*.{css,scss,vue}\ --fix } }CI 里跑npm run lint:style有报错就退出非零码卡住合并。本地开发用lint:style:fix批量修。如果项目用 husky lint-staged可以只对暂存文件跑{ lint-staged: { *.{css,scss,vue}: [stylelint --fix] } }4. 验证请求一次通过 / 失败的实测配置完别急着信手动造两个文件验证一下。先建一个「故意写错」的样式文件src/styles/bad.scss// src/styles/bad.scss .box { color: #FFF; margin: 0px; display: flex; background-color: red; }跑校验npm run lint:style预期输出类似src/styles/bad.scss 2:10 ✖ Expected #fff to be #FFF color-hex-case 3:11 ✖ Unexpected unit px length-zero-no-unit 5:3 ✖ Expected background-color to come before display order/properties-order三条报错分别对应颜色大小写、零值带单位、属性顺序。说明规则生效了。再跑自动修复npm run lint:style:fix修复后bad.scss变成.box { color: #fff; margin: 0; display: flex; background-color: red; }再跑一次npm run lint:style应该零报错。这一步就是「提交前校验通过」的验证动作。接着验证.vue文件。建src/components/Demo.vuetemplate div classdemohello/div /template script setup /script style scoped langscss .demo { color: #ABC; :deep(.inner) { padding: 0px; } } /style跑npm run lint:style应该报color-hex-case和length-zero-no-unit但:deep()不报错——说明ignorePseudoClasses和postcss-html都配对了。如果:deep()报selector-pseudo-class-no-unknown回去检查 3.2 里那条规则。VS Code 里打开这个.vue文件保存时应该自动把#ABC修成#abc、0px修成0。如果没反应看第 5 节。5. 本篇常见错排查5.1 保存不自动修复先确认 VS Code 装了 stylelint 插件作者是 stylelint当前 1.4 系列并且右下角状态栏没有显示它被禁用。然后检查settings.json里editor.codeActionsOnSave的 key 是不是source.fixAll.stylelint拼错一个字母就不生效。最后确认stylelint.validate数组里有vue。5.2 报Cannot find module stylelint-config-standard-vue/scss这是版本路径问题。2024 年stylelint-config-standard-vue把 SCSS 配置拆到了/scss子路径如果你装的是旧版路径是stylelint-config-standard-vue。先看package.json里装的版本v1.x 用/scss更早的用不带后缀。实在不确定就npm ls stylelint-config-standard-vue看实际版本。5.3 报Unknown word或 SCSS 语法解析失败多半是customSyntax没配对。.vue文件必须走postcss-html纯.scss文件走postcss-scss。如果你在overrides里只写了.vue没写.scss纯 SCSS 文件可能用默认 CSS 解析器遇到嵌套就报Unknown word。补一条{ files: [**/*.scss], customSyntax: postcss-scss, }5.4 规则全部失效一条都不报九成是 3.3 里说的空stylelint.config覆盖问题。进settings.json搜stylelint.config删掉。另一个可能是根目录同时存在.stylelintrc和.stylelintrc.jsstylelint 按优先级只读一个删掉多余的。5.5stylelint-config-prettier相关报错如果你从旧项目迁移过来extends里还留着stylelint-config-prettier在 stylelint v15 会报规则重复或找不到模块。直接删掉这一行卸载这个包标准规则集已经处理了冲突。5.6 CI 里报No files matching the pattern检查lint:style脚本里的 glob 路径。如果样式文件不在src下或者用了 monorepo 结构路径要相应调整。可以先本地跑npx stylelint src/**/*.{css,scss,vue}确认能匹配到文件再放进 CI。6. 把 Key 和 lint 各归各位回到工具链整体stylelint 负责样式规范本地跑、CI 卡不需要任何网络和 Key。TaoToken 负责的是你项目里「需要调模型」的那部分——比如用 AI 辅助批量改样式、写代码审查脚本、跑 Coding Agent。这两条线不要混。如果你确实要在项目里接模型能力建议这样分流排障和接入类问题先看 API Keys 管理和接入文档把 base URL 和 Key 配好API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content想先验证模型效果、试对话走模型对话入口https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content长期编码、Agent 类场景走 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content官网总入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content我自己的习惯是.stylelintrc.js和.vscode/settings.json提交进仓库团队共享Key 相关的东西一律走环境变量不进仓库。这样换人、换机器、换 CI样式规范照跑Key 也不会泄露。