根本原因是VSCode未将Prettier绑定到当前文件类型;需检查右下角语言模式、设esbenp.prettier-vscode为默认格式化器、在.vscode/settings.json中用语言块启用formatOnSave,并关闭ESLint自动修复以避免冲突。

为什么保存后 Prettier 没反应
根本原因不是插件没装,而是 VSCode 没把 Prettier 绑定到当前文件类型。打开一个 .js 文件,看右下角状态栏:如果显示的是 ESLint 或 None,说明格式化器未生效。
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac),输入Format Document With,选Configure Default Formatter→Prettier - Code formatter - 更可靠的做法是,在项目根目录建
.vscode/settings.json,写入语言块配置,例如:{ "[javascript]": { "editor.formatOnSave": true }, "[typescript]": { "editor.formatOnSave": true }, "[vue]": { "editor.formatOnSave": true } } -
"editor.formatOnSave": true必须放在语言块内,写在顶层不会自动作用于所有语言
如何让 Prettier 和 ESLint 不打架
冲突本质是两者都试图改代码——ESLint 自动修复(eslint.autoFixOnSave)会覆盖 Prettier 的格式结果,导致保存后代码“跳来跳去”甚至报错。
- 关闭 ESLint 的自动修复:
"eslint.autoFixOnSave": false(已废弃,改用"editor.codeActionsOnSave") - 只保留校验,不格式化:
"editor.codeActionsOnSave": { "source.fixAll.eslint": true }这行必须配合eslint-config-prettier使用,否则仍可能冲突 - 确保
.eslintrc中"extends"最后一项是"prettier",顺序不能颠倒
配置文件写在哪、怎么写才有效
.prettierrc 有优先级,但语法错误会导致静默失效——VSCode 不报错,只是退回到默认规则。
- 推荐用
.prettierrc.json(最稳),避免.prettierrc.js在 ESM 项目里因module.exports写法出问题 - 常见必设项:
"semi": false、"singleQuote": true、"tabWidth": 2,不显式声明就可能沿用 VSCode 默认值 - Vue 单文件组件中
<script setup>需要Prettier ≥ 2.8.0,旧版本直接跳过 script 区域 - 路径别写错:
"prettier.configPath": ".prettierrc.json"要和实际文件名完全一致,大小写敏感
格式化没生效?先查这三件事
很多问题其实卡在基础链路上,而不是配置本身。
- 确认当前文件类型是否被识别:打开
.ts文件,右下角应显示TypeScript,不是Plain Text;否则 Prettier 根本不启动 - 检查
editor.defaultFormatter是否指向esbenp.prettier-vscode,不是vscode.typescript-language-features - 改完
.prettierrc或.vscode/settings.json后,必须重启 VSCode —— 缓存不刷新,新配置不会加载
配置真正跑通的关键,往往不在“写得多”,而在“绑定准、路径对、不混用”。尤其语言块配置和 ESLint 的 autoFix 开关,是绝大多数人卡住的两个点。


















