Prettier保存无反应主因是editor.formatOnSave被工作区或语言配置覆盖、未将esbenp.prettier-vscode设为对应语言默认格式化器、配置文件语法错误导致静默退出,或ESLint插件抢占格式化控制权。

editor.formatOnSave 开启了但没反应
保存后代码纹丝不动,大概率是这个开关被悄悄关掉了。VSCode 的 editor.formatOnSave 设置有三层作用域:全局、工作区(.vscode/settings.json)、语言专属配置,**工作区设置会覆盖全局**。
常见踩坑点:
- 项目根目录的
.vscode/settings.json里写了"[javascript]": { "editor.formatOnSave": false },直接禁掉所有 JS 文件 - 右下角状态栏显示的是
Plain Text而不是JavaScript或TypeScript,格式化根本不会触发 - 只在用户设置里开了
editor.formatOnSave,但没配对应语言的默认格式化器,VSCode 不知道该调谁
esbenp.prettier-vscode 没被绑定到当前语言
装了插件 ≠ VSCode 就会用它。默认情况下,VSCode 对 .js 和 .ts 文件用的是内置的 vscode.typescript-language-features,完全绕过 Prettier。
必须显式指定:
- 打开设置(
Ctrl+,),搜default formatter,在JavaScript › Default Formatter和TypeScript › Default Formatter里选esbenp.prettier-vscode - HTML、Vue、MDX 等非标准语言 ID 需手动加块:
"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 右键 →
Format Document With…,如果列表里压根没 Prettier,说明绑定失败;如果点了没反应,可能是插件未启用或版本不兼容
.prettierrc 或 prettier.config.js 解析失败导致静默退出
Prettier 遇到配置文件语法错误(比如 JSON 多了个逗号、YAML 缩进错位),不会报错,而是直接放弃加载规则——看起来就像“完全没生效”,其实它连配置都没读进去。
检查要点:
- 配置文件必须放在项目根目录,
prettier不会向上递归查找(v3.0+ 虽支持--find-config-path,但 VSCode 插件默认不启用) - 文件名必须准确:
.prettierrc、.prettierrc.json、prettier.config.js、package.json中的prettier字段都行;但.prettierrc.yml写成.prettierrc.yaml就无效 - 空配置文件(如
{})会启用 Prettier 默认规则(分号、双引号),和团队习惯冲突时,容易误判为“没生效”
ESLint 插件抢了格式化控制权
当 ESLint 插件也启用了 editor.formatOnSave,VSCode 会优先执行 ESLint 的 source.fixAll.eslint,而不是调 Prettier——结果是你改了 .prettierrc 却发现引号/分号还是老样子。
两种解法选其一:
- 关掉 ESLint 的自动修复:
"editor.codeActionsOnSave": { "source.fixAll.eslint": false } - 显式控制顺序:
"editor.codeActionsOnSave": { "source.fixAll.eslint": true },并确保eslint-config-prettier已安装且在.eslintrc.js的extends中排最后 - 绝对不要在
.eslintrc.js里写"quotes"、"semi"这类纯格式规则,它们该由 Prettier 统一管
最常被忽略的一点:VSCode 的输出面板(Output → Prettier)里可能藏着解析错误或加载失败的日志,但很多人根本没打开看过。配置看似全对,却卡在某个拼写错误或路径偏差上,不看输出就只能靠猜。


















