ESLint与Prettier必须共存,因ESLint负责语义检查(如no-unused-vars),Prettier专管纯格式(缩进、引号等);二者职责分明但规则重叠,需通过"extends": ["eslint:recommended", "prettier"]消除冲突,并配合.editorconfig兜底保障跨编辑器基础一致性。

VSCode 本身不强制任何 JavaScript 风格,所谓“强统一”必须靠插件组合 + 项目级配置落地,缺一不可。只装插件或只写配置,都会在协作中失效。
为什么 ESLint 和 Prettier 必须共存
ESLint 负责语义检查(比如 no-unused-vars、no-console),Prettier 负责纯格式(缩进、引号、换行)。两者职责不同,但规则有重叠——例如 semi(分号)和 quotes(引号)在 ESLint 里也能配,但一旦和 Prettier 冲突,就会报红或格式错乱。
- ESLint 初始化时,务必选 “Do not enforce a specific style guide”,否则它会自带一套格式规则,和 Prettier 对着干
- 在
.eslintrc.json中显式加入"extends": ["eslint:recommended", "prettier"],后者会关闭所有与 Prettier 冲突的 ESLint 规则 - Prettier 的配置必须单独写在
.prettierrc或package.json的prettier字段里,不能只靠 ESLint 的rules控制格式
editor.defaultFormatter 必须指向 prettier-vscode
VSCode 默认对 .js 文件使用内置格式器,它不认 .prettierrc,也不管 ESLint。不显式指定,editor.formatOnSave 就是摆设。
- 确认已安装扩展:
esbenp.prettier-vscode(官方 Prettier 插件),不是其他同名但非官方的包 -
settings.json中必须包含:"editor.defaultFormatter": "esbenp.prettier-vscode" - 如果项目同时用 TypeScript,还要加:
"editor.defaultFormatter": "esbenp.prettier-vscode"对typescript和typescriptreact语言也生效,否则 .tsx 文件不格式化 - 避免全局设置覆盖项目设置:优先把配置写在项目根目录的
.vscode/settings.json,而不是用户级 settings.json
EditorConfig 是跨编辑器兜底层
当有人没装 Prettier 插件,或用 Sublime/Vim 开这个项目时,.editorconfig 是唯一能保住基础缩进、换行、空格的防线。
- 必须放在项目根目录,且第一行写
root = true - 关键项不能依赖 Prettier:比如
indent_style = space、indent_size = 2、end_of_line = lf,这些 VSCode 会直接读取并应用,不经过任何插件 - 不要和 Prettier 冲突:比如 Prettier 设了
tabWidth: 2,EditorConfig 就别设indent_size = 4,否则保存时可能反复跳动 - VSCode 需要安装
editorconfig.editorconfig插件才识别该文件,否则无视
团队同步最容易漏掉的三件事
单人配置跑通不等于团队强统一。真正卡住协作的是那些“看起来正常但实际不生效”的细节。
-
.vscode/settings.json必须提交到 Git,否则新成员 clone 后默认用自己本地设置 -
package.json里建议加"lint-staged"+Husky钩子,在 commit 前跑npx eslint --fix && npx prettier --write,防漏网之鱼 - 检查右下角状态栏:打开一个
.js文件,确认显示的是Prettier,不是ESLint或None;点开它能切换格式器,说明当前语言绑定正确
强统一不是装完插件就结束,而是让每个文件在任意人、任意机器、任意编辑器上打开时,缩进不会变、引号不会翻、分号不会丢——这需要 ESLint、Prettier、EditorConfig 三层各司其职,且全部配置都落在项目目录里,不依赖个人偏好。


















