vscode中prettier生效需三要素:设editor.defaultformatter为esbenp.prettier-vscode、启用editor.formatonsave、确保项目含有效.prettierrc或已安装本地prettier包;多语言需语言块绑定,冲突插件(如vetur、eslint)须禁用其格式化功能。

VSCode 默认不启用 Prettier 格式化,装完插件后不配置就等于没装——它不会自动接管保存行为,也不会识别项目级规则,更可能和 ESLint、Vetur 或内置格式器打架。
怎么让 Prettier 真正生效而不是“假装在工作”
核心就三点:指定默认格式化器、打开保存触发、确保配置可被读取。缺一不可,漏一个就会出现「点了保存但代码纹丝不动」或「报错说找不到 prettier 可执行文件」。
-
editor.defaultFormatter必须设为"esbenp.prettier-vscode",不能只写"prettier"或留空 -
editor.formatOnSave设为true,否则格式化永远只靠手动Shift+Alt+F - 如果项目里有
.prettierrc或.prettierrc.json,Prettier 会自动加载;但若没配文件,又开了editor.formatOnSave,VSCode 会 fallback 到内置默认规则(比如强制双引号),和团队规范冲突
多语言/多插件共存时怎么避免格式化打架
Vue 项目最典型:Vetur、ESLint、Prettier 都想管 HTML/JS 部分,结果保存一次弹三个提示框,或者格式化一半停住。
- 用语言专属配置块锁定格式器,比如:
"[vue]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"} - Vetur 用户必须关掉它的内置格式器,否则会覆盖 Prettier:
"vetur.format.defaultFormatter.html": "prettier""vetur.format.defaultFormatter.js": "prettier"
同时把"vetur.validation.template"设为false,避免和 ESLint 的 template 规则重复校验 - 如果同时启用了 ESLint 自动修复(
source.fixAll.eslint),要确认eslint.validate包含了"vue"和"javascriptreact",否则 .vue 里的 script 标签内 JS 不会被 lint
为什么改了 settings.json 还是不格式化
常见真因不是配置写错,而是路径或权限问题。
- 全局
settings.json和项目级.vscode/settings.json冲突时,后者优先级更高——检查你是不是在项目里建了.vscode/settings.json却忘了同步更新它 - Prettier 插件依赖本地
prettier包,如果项目没装prettier(即node_modules/prettier不存在),插件会回退到 VSCode 自带版本,但该版本不读取项目配置文件,导致.prettierrc失效 - Windows 下路径含中文、空格或特殊符号时,Prettier 可能静默失败;Mac/Linux 注意 Node 版本是否太老(
prettier@3.x要求 Node ≥ 14.20)
最常被跳过的动作:改完配置后没重启 VSCode 窗口,或没重新打开项目文件夹——Prettier 的语言服务不会热重载,改了 defaultFormatter 必须重开编辑器才能生效。











