VSCode需配置ESLint为默认格式化器并启用自动修复。在.settings.json中设置defaultFormatter、formatOnSave和codeActionsOnSave,确保eslint.config.js存在且Prettier与ESLint规则不冲突,统一用.editorconfig管理基础编辑行为。

VSCode 默认不强制任何代码风格,所谓“格式化统一”完全取决于你装了什么插件、配了什么规则、以及项目里有没有配置文件。没有统一配置,靠手动调格式只会越来越乱。
怎么让 VSCode 自动按 ESLint 规则格式化 JavaScript/TypeScript
很多人装了 ESLint 插件却还是格式化不出效果,核心原因是没把格式化“交权”给 ESLint —— VSCode 默认用的是内置的 javascript.format.* 配置,它和 ESLint 规则互不感知。
- 在工作区
.vscode/settings.json中必须显式指定:{ "editor.defaultFormatter": "dbaeumer.vscode-eslint", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": true } } -
source.fixAll.eslint比editor.formatOnSave更关键:它会触发 ESLint 的自动修复(比如补分号、改引号、重排 import),而纯格式化只管缩进换行 - 确保项目根目录有
eslint.config.js或.eslintrc.cjs,且已安装eslint和对应解析器(如@typescript-eslint/parser)
Prettier 和 ESLint 冲突时谁该让步
ESLint 管“代码质量”,Prettier 管“视觉样式”。两者都试图改同一行(比如单引号 vs 双引号),就会打架。正确做法是让 ESLint 忽略所有格式类规则,全交给 Prettier。
- 装
eslint-config-prettier并在eslint.config.js里禁用冲突规则:import prettier from "eslint-config-prettier"; export default [ // ...你的其他配置 prettier // 放最后,覆盖前面的格式规则 ];
- 不要同时启用
prettier.eslintIntegration(旧版插件选项,已废弃) - 如果仍想用 Prettier 格式化非 JS/TS 文件(如 Markdown、JSON),单独配
[markdown]或[json]块,指定editor.defaultFormatter为esbenp.prettier-vscode
团队协作时如何避免“我的格式化覆盖了你的空格”
不同人本地 VSCode 设置不同,editor.insertSpaces、editor.tabSize、files.trimTrailingWhitespace 这些看似小的设置,一提交就引发大量无关 diff。
- 把这些基础编辑行为写进项目级
.editorconfig(VSCode 会自动读取):root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true
- 删掉用户全局
settings.json里和缩进/换行/空格相关的配置,全部交给.editorconfig管理 - 加
.prettierignore排除构建产物(dist/、node_modules/),否则保存时可能卡住或误格式化
最常被忽略的一点:VSCode 的格式化行为是“多层叠加”的——用户设置 → 工作区设置 → .editorconfig → 语言专属设置 → 插件自身逻辑。出问题时别只盯着一个地方改,先运行 Developer: Toggle Developer Tools 看控制台有没有插件报错,再检查命令面板里 Format Document With... 列出的默认格式化器是不是你预期的那个。










