保存后未自动加单引号或补分号,根本原因是ESLint与Prettier职责未对齐:ESLint负责semi、quotes等可修复规则,Prettier专注缩进换行等纯格式;若二者冲突或配置错位(如未启用source.fixAll.eslint、未禁用editor.formatOnSave、.eslintrc未extends prettier),则修复失效。

为什么保存后代码没自动加单引号或补分号?
不是插件没装,而是 ESLint 和 Prettier 的职责没对齐——ESLint 负责检查和修复规则类问题(比如 semi、quotes),Prettier 负责格式化(比如缩进、换行、括号位置)。两者冲突时,Prettier 会覆盖 ESLint 的格式类修复。
常见表现:改了 .eslintrc.json 里 quotes 规则,但保存后引号还是双引号;或者开了 source.fixAll.eslint,却没反应。
- 确认 ESLint 扩展已安装,且项目根目录有
.eslintrc.*文件(如.eslintrc.js) - 确保
extends包含prettier,否则 ESLint 和 Prettier 规则会打架 - 检查 VSCode 设置中是否同时启用了
editor.formatOnSave和editor.codeActionsOnSave,二者要配合用,不能只开一个 - Prettier 默认不处理分号、引号这类“风格选择”,得靠 ESLint 的
rules定义,再由source.fixAll.eslint触发修复
如何让 save 真正触发自动修正?
VSCode 的保存行为是“触发点”,但具体执行哪套逻辑,取决于你配了什么、配在哪一级(用户级 or 工作区级)。
-
editor.formatOnSave:只调用格式化器(如 Prettier),不管规则校验 -
editor.codeActionsOnSave:在保存时执行代码操作,其中source.fixAll.eslint才真正调用 ESLint 的修复能力 - 必须同时启用两者,并确保
editor.defaultFormatter指向esbenp.prettier-vscode,否则格式化器可能不响应 - 如果项目里有
.vscode/settings.json,优先读它;没有就 fallback 到用户设置。团队协作务必把该文件提交到 Git
推荐最小可用配置:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": ["javascript", "javascriptreact"]
}
eslint.config.js vs .eslintrc.json 怎么选?
ESLint v8.22+ 推荐用 eslint.config.js(或 eslint.config.cjs),旧版 .eslintrc.* 仍可用,但新项目建议直接上新版配置文件。
-
eslint.config.js支持 ESM 导入、类型提示、动态逻辑(比如根据环境开关规则),更灵活 -
.eslintrc.json简单直白,适合小项目或 CI 中快速加载,但无法写条件判断 - 若同时存在两者,ESLint 优先用
eslint.config.js,旧配置会被忽略 - 注意 Node 版本:ESM 配置要求 Node ≥ 14.18,否则需用
.cjs后缀并设"type": "commonjs"
团队共享配置最容易漏掉的三件事
本地跑通不等于团队一致。很多问题出在“以为配好了”,其实只在自己机器生效。
- 没把
.vscode/settings.json提交进仓库——这个文件控制编辑器行为,不提交就等于没配 -
eslint或prettier依赖没写进devDependencies,新人npm install后 ESLint 扩展找不到本地 CLI,报错ESLint not found - 没统一
prettier版本:不同 minor 版本对trailingComma解析可能不一致,导致同一段代码在 A 机加逗号、B 机删逗号
真正的“强制执行”,靠的是配置文件 + 依赖声明 + 提交动作三位一体。少一个环节,就有人绕过规则。

















