ESLint 与 Prettier 冲突的根本原因是职责未分离:需禁用 ESLint 中所有格式类规则,通过 eslint-config-prettier 统一交由 Prettier 处理格式,VSCode 中仅启用 Prettier 格式化、关闭 ESLint auto-fix,确保规则加载顺序正确且配置生效一致。

ESLint 报错但 Prettier 自动格式化后又报错
这是最典型的冲突表现:保存文件时,Prettier 把代码按自己规则重排(比如改缩进、加尾逗号),ESLint 却立刻用另一套规则检查,发现“不符合 eslint-config-airbnb 的 indent 规则”或“comma-dangle 不该有”,于是红波浪线反复闪现。
根本原因不是二者不能共存,而是没明确「谁管校验、谁管格式」。必须让 ESLint 完全信任 Prettier 的格式结果,不重复检查格式类规则。
- 删掉 ESLint 配置里所有和格式相关的规则,例如:
"indent"、"quotes"、"semi"、"comma-dangle"、"arrow-spacing" - 安装并启用
eslint-config-prettier:它会主动关闭 ESLint 中与 Prettier 冲突的全部规则 - 在
.eslintrc.js的extends数组末尾加上"prettier"(注意:必须放最后,否则会被前面的配置覆盖)
VSCode 保存时只触发 Prettier,不跑 ESLint auto-fix
很多人以为装了 ESLint 和 Prettier 插件就自动协同,其实 VSCode 默认不会让它们协商谁来改代码。保存时若两个插件都启用了 “Format on Save”,就会互相打架——Prettier 格式化完,ESLint 立刻按旧规则修一版,再触发 Prettier 又修一遍。
正确做法是:只留一个格式化入口,把 ESLint 的 auto-fix 降级为纯检查(报错/警告),格式动作全交给 Prettier。
- 关掉 ESLint 插件的自动修复:在 VSCode 设置中搜
eslint.autoFixOnSave,设为false - 确保
editor.formatOnSave为true,且editor.defaultFormatter设为esbenp.prettier-vscode - 如需手动触发 ESLint 修复(比如修逻辑错误),用快捷键
Ctrl+Shift+P→ 输入ESLint: Fix all auto-fixable Problems,而不是依赖保存
项目里 .prettierrc 和 .eslintrc 同时存在,但规则还是对不上
常见于老项目迁移:.prettierrc 里写了 "semi": false,但 ESLint 仍报“missing semicolon”。这说明 ESLint 没读到 eslint-config-prettier,或者读到了但被其他配置覆盖。
关键不是文件有没有,而是加载顺序和生效范围是否一致。尤其注意工作区设置和全局设置的优先级差异。
- 检查
.eslintrc.js中extends是否包含"prettier",且它出现在数组最后一个位置 - 确认没有在
package.json的eslintConfig字段里重复定义规则,导致覆盖了 .eslintrc - 运行
npx eslint --print-config path/to/file.js查看最终合并后的规则,确认semi、quotes等已被设为off
保存后红波浪线消失但黄波浪线还在(ESLint warning 不消失)
黄波浪线通常是 ESLint 的 warning 级别提示,比如 no-console、no-unused-vars。这类问题和 Prettier 无关,但容易误以为是冲突——其实是 ESLint 正常工作,只是你没处理或没忽略。
VSCode 默认显示 warning,但很多人只盯着 red,忽略了 yellow 其实也在说话。
- 检查
.eslintrc.js中对应规则的 level,是"warn"还是"error";想彻底隐藏 yellow,可临时改为"off",但不推荐 - 如果 warning 是合理提醒(如开发环境允许
console.log,但生产禁用),可在代码行尾加注释关闭:// eslint-disable-line no-console - 确保 VSCode 的
eslint.packageManager设置正确(如"npm"或"pnpm"),否则可能加载了旧版本 ESLint,规则解析不一致
真正难的不是配通,而是每次新增依赖、升级插件、切分支时,这些配置容易悄无声息地失效。建议把 npx eslint --print-config 当成日常快检动作,比盯着波浪线猜更省时间。


















