prettier在vscode中无反应,主因是editor.formatonsave未真正启用、对应语言未设esbenp.prettier-vscode为默认格式化器、或插件未成功加载;需检查工作区配置覆盖、语言模式匹配、配置文件语法错误及扩展冲突。

VS Code 里 Prettier 看似装了、开了开关、点了保存,却完全没反应——根本不是插件坏了,而是三个关键环节断链:格式化开关没真开、默认格式化器没绑到当前语言、或者 Prettier 根本没加载成功。
editor.formatOnSave 开启了但没生效
这个设置必须为 true,且不能被工作区或语言专属配置覆盖。很多人只在全局设了,结果项目根目录下的 .vscode/settings.json 里写了 "[javascript]": { "editor.formatOnSave": false },直接屏蔽掉所有 JS 文件的自动格式化。
- 用
Ctrl+Shift+P→Preferences: Open Workspace Settings (JSON)检查工作区配置,确认没有显式关掉formatOnSave - 如果只想对某类文件启用,必须写成语言专属形式:
"[typescript]": { "editor.formatOnSave": true },而不是笼统地设全局 - 右下角状态栏留意当前语言模式(比如显示的是
Plain Text而非JavaScript),模式不对,formatOnSave就不触发
esbenp.prettier-vscode 没被设为对应语言的默认格式化器
VS Code 不会自动把刚装的 Prettier 当作格式化工具。它默认用 vscode.typescript-language-features 处理 TS/JS,压根不会调用 Prettier,除非你明确告诉它:“这个语言归 Prettier 管”。
- 打开设置(
Ctrl+,),搜default formatter,展开JavaScript › Default Formatter和TypeScript › Default Formatter,下拉选esbenp.prettier-vscode(注意拼写,不能是prettier或prettier-vscode) - HTML、Vue、MDX 等需额外处理:它们不走标准语言 ID,得在
settings.json里手动加语言块,例如"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 右键文件 →
Format Document With…,如果列表里没出现Prettier,说明绑定失败;如果出现了但点不动,可能是插件没启用或版本不兼容
prettier.config.js 或 .prettierrc 语法错误导致静默退出
Prettier 遇到配置文件解析失败时,不会报错,而是直接放弃加载规则,退回到“什么都不做”的状态——看起来就像“失效”,其实它连规则都没读进去。
- 检查
.prettierrc是否用了单引号、注释、尾随逗号,这些在 JSON 中非法;改用prettier.config.js更稳妥(支持 JS 语法和注释) - 运行
npx prettier --debug-check index.js,它会明确指出哪一行、哪个键出错(比如trailingcomma拼错,或endOfLine值写成"LF"而非"lf") - 如果删掉配置文件后格式化突然正常,基本锁定是配置问题;此时可临时设
prettier.requireConfig: false绕过验证
插件本身未正确加载或被其他扩展干扰
VS Code 1.85+ 默认启用 prettier.enableLSP,旧版插件(如 v9.0 以下)可能因协议不兼容而初始化失败,控制台会报 Cannot find module 'prettier' ——但它不会弹窗提醒你。
- 打开扩展面板,确认安装的是作者为
esbenp的官方插件,版本 ≥ 9.10.0;右键 →Disable再Enable强制重载 - 按
Ctrl+Shift+P→Developer: Toggle Developer Tools,切到 Console 标签,保存一个文件,看是否有模块找不到或路径解析失败的日志 - 禁用 Beautify、ESLint(尤其带
eslint.autoFixOnSave的旧版)、Auto Rename Tag 等可能劫持保存钩子的扩展,逐一排查
最容易被忽略的是:Prettier 插件读取配置文件时,是从当前打开文件所在路径**向上逐级查找**第一个匹配的 prettier.config.js 或 .prettierrc,而不是固定读项目根目录。多根工作区或嵌套子包里,很可能根本没找到配置文件,也就不会应用任何规则。











