VSCode 保存时自动用 Prettier 格式化代码需同时满足:安装 esbenp.pretterr-vscode 插件、editor.formatOnSave 为 true(未被语言设置覆盖)、editor.defaultFormatter 设为 "esbenp.prettier-vscode";.prettierrc.json 需置于项目根目录且为标准 JSON;缩进需统一配置 useTabs、tabWidth 与 VSCode 的 insertSpaces、tabSize 一致。

VSCode 保存时自动用 Prettier 格式化代码
必须同时满足三个条件:插件已安装、保存触发开关打开、默认格式化器设为 Prettier。缺一不可,否则按 Ctrl+S 后代码毫无反应。
- 确保已安装官方插件
esbenp.prettier-vscode(不是其他名字相似的“Prettier”) -
editor.formatOnSave必须为true,且不能被语言专属设置覆盖(比如"[javascript]": { "editor.formatOnSave": false }就会关掉 JS 文件的自动格式化) -
editor.defaultFormatter设为"esbenp.prettier-vscode";如果只对某类文件生效,得单独配语言块,例如:"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 常见错误:改了
settings.json却没重启 VSCode 窗口,或配置写在了用户设置里,而项目根目录有.vscode/settings.json覆盖了它
Prettier 配置文件 .prettierrc.json 不生效?
VSCode 的 Prettier 插件默认只读取项目根目录下的 .prettierrc.json(或 .prettierrc、prettier.config.js),不会向上查找父目录,也不会自动识别 package.json 里的 prettier 字段——除非你显式启用 prettier.resolveConfigPath。
- 推荐直接建
.prettierrc.json,内容用标准 JSON(不能有注释):{ "semi": false, "singleQuote": true, "tabWidth": 2, "trailingComma": "es5" } - 若用
prettier.config.js,导出必须是 CommonJS:module.exports = { semi: false, singleQuote: true }; - 检查是否被 ESLint 干扰:如果同时用了 ESLint,
eslint-config-prettier必须在extends数组末尾,否则 Prettier 规则可能被覆盖
为什么 TypeScript / JSX 代码没对齐、换行不理想?
Prettier 对不同语言的换行逻辑差异很大,尤其 printWidth 和 trailingComma 组合影响显著。默认 printWidth: 80 在现代宽屏编辑器里常导致过度折行,而 trailingComma: "none" 会让对象/数组结尾少一个逗号,进而抑制多行展开。
- 建议将
printWidth调到100或120,配合trailingComma: "all",能明显减少无意义换行 - TypeScript 接口和类型别名默认不换行,加
arrowParens: "always"可让单参数箭头函数保持括号,提升一致性 - JSX 中属性过长时,Prettier 默认会把每个属性拆成一行;若想强制保持单行(如只有 2–3 个短属性),可设
jsxBracketSameLine: true,但注意这已被废弃,新版应改用bracketSameLine: true
格式化后缩进混乱、空格/Tab 混用?
VSCode 自身的缩进设置(editor.insertSpaces、editor.tabSize)和 Prettier 的 useTabs、tabWidth 冲突时,结果不可预测。Prettier 优先级更高,但它只管格式化时的输出,不管光标插入行为。
- 统一方案:关掉 VSCode 缩进自动推断,显式设
"editor.detectIndentation": false - Prettier 配置中明确写
"useTabs": false, "tabWidth": 2,并确保editor.insertSpaces也为true、editor.tabSize为2 - 已有文件混用空格和 Tab 时,先手动执行一次
editor.action.indentationToSpaces(命令面板搜 “Convert Indentation to Spaces”),再保存,Prettier 才能稳定工作
Prettier 的“自动对齐”本质是重写整行结构,不是简单补空格;真正容易被忽略的是:它不处理注释缩进、不调整 import 排序、也不管变量声明顺序——这些得靠 ESLint + eslint-plugin-import 或 sort-imports 补足。











