prettier + eslint 组合是 js 排版的底线配置,因 vscode 默认格式化器对 js 支持极弱,pretterr 负责视觉层规则(缩进、空格、括号等),eslint 负责语义层问题(如未使用变量),二者必须协同;否则会互相覆盖或冲突,需通过 eslint-config-prettier 禁用冲突规则,并统一配置于工作区级 .vscode/settings.json 以确保团队一致。

为什么 Prettier + ESLint 组合是 JS 排版的底线配置
单独开 editor.formatOnSave 或装一个插件就想自动排版,基本等于没配。VSCode 默认格式化器对 JS 支持极弱,prettier 负责统一缩进、空格、括号、分号等视觉层规则,eslint 负责语义层问题(如未使用变量、箭头函数返回值隐式换行),二者必须协同,否则会互相覆盖或报冲突。
-
prettier的printWidth和tabWidth必须与项目实际风格一致,否则保存时整段重排,尤其在团队协作中容易引发大量无关 diff -
eslint-config-prettier必须安装并启用,它禁用所有与 Prettier 冲突的 ESLint 规则(比如indent、quotes),否则两者会打架 - 不要把 Prettier 配置写在用户级
settings.json里——工作区级(即项目根目录.vscode/settings.json)优先级更高,且能随 Git 提交,避免本地配置污染他人环境
如何让 Ctrl+Shift+I / Alt+Shift+F 真正生效
快捷键失效不是插件没装,而是 VSCode 没认出你当前文件该用哪个格式化器。关键检查点有三个:
- 右下角语言模式必须是
JavaScript或TypeScript,不是Plain Text或JSON——Vue 单文件组件要设为Vue,否则<script></script>块内不触发 JS 格式化 -
editor.defaultFormatter必须明确指定为esbenp.prettier-vscode,不能只依赖插件自动注册;若已安装多个格式化器(如 Beautify),需手动设为默认 -
editor.formatOnSave要放在顶层设置里,不能包在"[javascript]": {}语言专属块中,否则只对部分文件生效
粘贴代码后缩进错乱?别怪插件,先看这三项
粘贴后缩进崩坏,90% 是因为 VSCode 在“猜”你想要什么缩进,而不是按你当前项目规则处理。
- 关掉
editor.detectIndentation:它会读文件前几行就决定全文件用空格还是 Tab,注释开头或空行直接导致误判 - 打开
editor.formatOnPaste:但前提是对应语言的格式化器已设为默认,否则它根本不会运行 - 已错乱的文件,先手动执行
Change Indentation→Convert Indentation to Spaces(或 Tabs),再保存——Prettier 不会修复历史混排,只处理新格式
ESLint 自动修复的边界在哪
eslint --fix 并非万能,它只修语法安全、无歧义的格式问题,比如多余空格、引号统一、分号缺失;但像对象属性排序、函数参数换行位置、箭头函数是否加括号这类风格选择,ESLint 默认不碰,得靠 Prettier。
- 保存时自动修复需开启
eslint.autoFixOnSave(VSCode 设置项),且仅对eslint规则列表中标记为✅ fixable的规则生效 - 某些规则(如
react-hooks/exhaustive-deps)可自动修复,但涉及逻辑判断的(如no-console)只会报错,不删代码 - 若发现
eslint --fix没反应,先确认当前文件是否被.eslintignore排除,或eslint-plugin-xxx插件未正确加载
detectIndentation 这个开关——它开着时,你调再多次 tabSize 都白搭。










