Stylelint与Prettier冲突的根本原因是两者重复管控格式规则,而Stylelint v15+已移除纯格式规则,旧配置残留或误用废弃的stylelint-config-prettier是主因;应卸载该包,改用stylelint-prettier插件统一由Prettier负责格式化,并在VS Code中关闭formatOnSave、启用stylelint.autoFixOnSave以避免冲突。

为什么Stylelint和Prettier会互相“打架”
根本原因不是工具本身有问题,而是两者都试图控制同一类事情:比如单引号、缩进、空行、分号(CSS里虽无分号但有类似语义的冒号/分隔符)——而它们的规则默认不互通。Prettier 格式化完 CSS,Stylelint 立刻报 string-quotes 或 indentation 错误;反之,Stylelint 修复后又触发 Prettier 的格式重写。
关键在于:Stylelint v15+ 已移除所有纯格式类规则(如 indentation、max-empty-lines),只保留语义检查能力(比如 no-duplicate-selectors、selector-class-pattern)。所以冲突通常来自旧配置残留或错误启用插件。
stylelint-config-prettier 已失效,别再装它
如果你用的是 stylelint 16.x(如 "stylelint": "^16.18.0"),stylelint-config-prettier 这个包已经废弃且不兼容。它原本的作用是“关掉 Stylelint 里和 Prettier 冲突的格式规则”,但现在这些规则根本不存在了。
- 运行
npm uninstall stylelint-config-prettier彻底删掉它 - 检查
stylelint.config.js或.stylelintrc.json中是否还包含"stylelint-config-prettier"在extends数组里——删掉 - 不要降级 Stylelint 来“适配”这个过时插件
用 stylelint-prettier 替代,让 Stylelint 尊重 Prettier 的决定
stylelint-prettier 不是关闭规则,而是把 Prettier 的格式校验变成 Stylelint 的一条规则。这样,Stylelint 报错就等于“这段 CSS 没被 Prettier 正确格式化”,而不是“你用了双引号”。
立即学习“前端免费学习笔记(深入)”;
- 安装:
npm install --save-dev stylelint-prettier prettier - 在
stylelint.config.js中启用:module.exports = { plugins: ['stylelint-prettier'], rules: { 'prettier/prettier': true, }, }; - 确保
.prettierrc存在且定义了格式偏好,例如:{ "singleQuote": true, "tabWidth": 2, "endOfLine": "lf" } - Stylelint 不再重复配置
string-quotes或indentation——这些由 Prettier 全权负责
VS Code 保存时只走一条链路,别让 Prettier 和 Stylelint 同时抢格式化权
VS Code 默认开启 editor.formatOnSave,如果同时装了 Prettier 和 Stylelint 插件,它会优先调用 Prettier(因 Prettier 是“格式化器”,Stylelint 是“linter”),结果 Stylelint 的 autoFixOnSave 根本没机会运行。
- 关闭
editor.formatOnSave - 开启
stylelint.autoFixOnSave(需安装官方插件stylelint.vscode-stylelint) - 确认
settings.json中没有"css.validate": false——关掉它,否则 VS Code 自带校验会遮盖 Stylelint 提示 - 如果项目含
.editorconfig,确保其中indent_style和end_of_line与.prettierrc一致
真正容易被忽略的是:Stylelint 的自动修复能力只对它自己能理解的语法有效;遇到 @layer、color-mix() 或自定义属性等新特性,必须配 customSyntax(如 postcss-scss 或 postcss-html),否则修复直接跳过。


















