根本原因是职责未分离:Prettier负责格式化(怎么排版),ESLint只负责检查逻辑错误(有没有bug),必须禁用ESLint所有格式规则、关闭其自动格式化能力,并在VSCode中明确指定Prettier为默认格式化器且开启保存时格式化。

VSCode 里 Prettier 和 ESLint 冲突,根本不是选谁的问题,而是必须让它们各干各的活:Prettier 负责格式(怎么排版),ESLint 负责检查(有没有 bug、逻辑错不错)。只要两者同时改同一行代码,就必然乱套。
为什么保存后代码反复跳、波浪线闪个不停
典型现象是:const a = 1 保存后变成 const a = 1;(Prettier 加了分号),紧接着 ESLint 立刻报 Missing semicolon;或者缩进在 2 空格和 4 空格之间来回切。这不是插件坏了,是 VSCode 同时触发了:
-
editor.formatOnSave(调用 Prettier 格式化) -
editor.codeActionsOnSave中的"source.fixAll.eslint"(调用 ESLint 自动修复)
两个动作没协商,直接覆盖对方输出。解决路径只有一条:关掉 ESLint 的格式化能力,只留它报错。
VSCode 设置里必须改死的三项
光改 .eslintrc.js 没用,VSCode 必须明确“谁来动手”。这三项配置缺一不可,且顺序/布尔值不能错:
-
"editor.formatOnSave": true—— 保持开启,但只让它走 Prettier -
"editor.defaultFormatter": "esbenp.prettier-vscode"—— 明确指定 Prettier 为默认格式化器(不是dbaeumer.vscode-eslint) -
"eslint.format.enable": false—— 关键!必须设为false,否则 ESLint 插件会偷偷自己格式化
顺手删掉所有残留的旧配置,比如 prettier.eslintIntegration(已废弃,v8+ 不兼容)或 eslint.autoFixOnSave(已过时,用 codeActionsOnSave 替代)。
ESLint 配置里怎么禁掉所有格式规则
目标是让 ESLint 完全不碰 indent、quotes、semi、comma-dangle 这类事。手动关容易漏,推荐用 eslint-config-prettier 一键清空:
- 运行
npm install --save-dev eslint-config-prettier - 在
.eslintrc.js的extends数组末尾加上"prettier"(顺序不能错,必须放最后) - 删掉所有显式写的格式类
rules,例如"semi": ["error", "always"] - 保留
"prettier/prettier": "error"—— 这条不是让 ESLint 格式化,而是让它把 Prettier 认为不合规的地方也标出来(比如你忘了配.prettierrc)
注意:eslint-plugin-prettier 不是必须项,现在主流做法是让 ESLint 只检查、Prettier 只格式化,二者不耦合。
Vue/React 文件不生效?语言识别没配对
VSCode 默认不把 .vue 或 .jsx 当 JavaScript 处理,导致 ESLint 不扫描、Prettier 不触发。必须在项目根目录的 .vscode/settings.json 里补两块:
"files.associations": {"*.vue": "vue", "*.jsx": "javascriptreact"}"[vue]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}
如果用了 Vetur,记得关掉它的格式化:"vetur.format.enable": false,否则它会和 Prettier 抢着修 <template> 块。
最容易被忽略的是:VSCode 工作区必须打开在项目根目录(不是父文件夹),否则它找不到 node_modules/.bin/prettier,会直接报 Prettier not found。另外,.prettierrc 必须存在且格式合法——哪怕只写 {"semi": true},也能让 Prettier 启动起来。


















