vscode保存时自动修复不生效,首要检查eslint是否已安装、语言模式是否正确、settings.json配置是否完整;核心配置需包含codeactionsonsave、validate、options三部分,并禁用formatonsave以防冲突。

VSCode保存时自动修复不生效?先看这三件事
90%的“自动修复不工作”问题,其实和配置无关,而是基础链路断了。ESLint插件只是个“翻译器”,真正干活的是你项目里装的eslint包——如果node_modules/.bin/eslint不存在,VSCode连校验都启动不了。
- 打开命令面板(
Ctrl+Shift+P),运行ESLint: Show Output Channel,看输出里有没有Failed to load config或Cannot find module——这是最直接的线索 - 确认项目已执行
npm install eslint --save-dev(或yarn add eslint -D),不是只装了VSCode插件 - 检查右下角语言模式:.vue文件要显示
Vue,.ts文件要显示TypeScript,否则eslint.validate根本不会触发
settings.json里必须写的四行核心配置
别信图形界面勾选,settings.json才是唯一可信源。以下配置适用于绝大多数JS/TS/Vue项目,且能避免和Prettier打架:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": ["javascript", "typescript", "vue"],
"eslint.options": {
"extensions": [".js", ".ts", ".vue"]
},
"editor.formatOnSave": false
}
-
"editor.formatOnSave": false是关键——它让格式化权交给ESLint,而不是Prettier或其他formatter,避免引号、分号等规则冲突 -
"eslint.options.extensions"必须显式声明.vue,否则Vetur或Vue SFC里的JS逻辑不会被ESLint扫描 - 如果用
eslint.config.js(Flat Config新格式),需额外开启eslint.experimental.useFlatConfig: true,否则VSCode直接忽略
Vue/React项目常见修复失败场景
不是所有规则都能自动修复,尤其涉及框架特性的部分。比如Vue里vue/multi-word-component-names报错,ESLint只能提示,不能帮你重命名组件;React里react-hooks/exhaustive-deps也基本靠手动补依赖。
- 可修复的典型问题:
quotes(单双引号)、comma-dangle(尾逗号)、indent(缩进)、no-unused-vars(删未用变量) - 不可修复但可快速修正的:
vue/require-default-prop(点灯泡Ctrl+.就能加默认值) - 容易踩坑:在
.eslintrc.js里写env: { browser: true, node: true },却在Node脚本里用document——ESLint会报document is not defined,但这没法自动修,得改环境或加/* global document */
团队协作时最容易被忽略的一件事
很多人把.eslintrc.js配好了就以为万事大吉,但VSCode默认只读当前工作区根目录的配置。遇到monorepo或嵌套项目(比如packages/foo/),ESLint可能加载错配置,导致子包规则失效。
- 解决办法是在
settings.json里加"eslint.workingDirectories",例如:"eslint.workingDirectories": ["./", "./packages/*"]
- 更稳妥的做法:每个子包都放一个
package.json,并在其中声明"eslintConfig"字段,这样本地eslint二进制能精准定位 - 别依赖全局
eslint——不同项目可能用v7和v8,规则行为差异很大,node_modules/.bin/eslint才是唯一可信入口











