Prettier保存无反应的根本原因是VS Code未调用它,必须显式绑定语言、配置触发条件并确保项目依赖存在;缺一不可。

装了插件但保存没反应?不是插件坏了,是 VS Code 根本没调用它——必须显式指定语言绑定、路径和触发条件,缺一不可。
为什么按 Ctrl+S 没格式化
VS Code 不会自动把 Prettier 当作任何语言的默认格式化器,哪怕插件已安装。它只在你明确“点名”时才干活。
- 右下角状态栏显示的是
ESLint、None或空白?说明当前文件没绑定 Prettier -
editor.formatOnSave开了,但没配语言块(如"[javascript]"),该设置对 JS/TS 文件实际不生效 - 扩展 ID 写错:必须是
"esbenp.prettier-vscode",写成"prettier"或"prettier-vscode"都会静默失败 - 项目里没装
prettier包(node_modules/prettier不存在),插件 fallback 到自带版本,但该版本不读.prettierrc
怎么让保存时真正触发格式化
靠全局设置容易误伤其他项目,推荐直接在项目根目录建 .vscode/settings.json,只写这几行:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSaveMode": "modifications",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
-
editor.formatOnSaveMode: "modifications"只格式化改动过的行,避免大文件全量重排 - 语言块配置比全局
editor.defaultFormatter更可靠,尤其对.vue、.md等非标准后缀 - Vue 项目还需额外加
"[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }
为什么 .prettierrc 改了却没效果
配置文件语法错误或位置不对,Prettier 会直接跳过,回退到内置默认值(比如 semi: true),你根本不知道它没读进去。
-
.prettierrc必须放在项目根目录,VS Code 不会向上查找父级目录 - 用 JSON5 格式(支持注释、末尾逗号),避免纯 JSON 因一个逗号报错导致整个配置失效
- 别用
.prettierrc.js:CI 流水线或队友本地没 Node 环境时会挂,小项目优先选.prettierrc或.prettierrc.json - 检查是否启用了
prettier.requireConfig: true(某些团队强制要求)——没配文件会直接报错
和 ESLint 冲突时代码越整越乱
不是 bug,是两个工具都在改同一段代码的格式。Prettier 负责“怎么排版”,ESLint 的 fix 应只负责“逻辑修正”。
- 必须安装
eslint-config-prettier并加到.eslintrc.js的extends最末尾:"extends": ["eslint:recommended", "prettier"] - 禁用 ESLint 的格式类规则:它只该管
no-unused-vars、no-console,不该碰缩进或引号 - 关掉 Vetur 的内置格式器(Vue 项目):
"vetur.format.defaultFormatter.html": "prettier",否则它会覆盖 Prettier - 别同时开
"source.fixAll.eslint"和"editor.formatOnSave"——除非你明确要 ESLint 先修逻辑、Prettier 再排版,且已确认顺序可控
最容易被忽略的是:Prettier 插件本身不带可执行文件,它依赖项目里的 node_modules/prettier。没装包、路径错、或用了 pnpm/yarn v4+ 却没配 prettier.prettierPath,都会导致配置看起来全对,实则完全不生效。


















