vscode保存时eslint不自动修复,因默认未启用editor.codeactionsonsave,须显式配置{"source.fixall.eslint": true},并确保eslint.validate、eslint.options.extensions正确设置且禁用editor.formatonsave。

VSCode 本身不执行 JavaScript,所谓“运行前拦截”实际指在保存、提交或手动触发时,由 ESLint 提前发现语法错误、未声明变量、潜在逻辑风险等问题——这些本该在浏览器或 Node.js 运行时报错的内容,被提前暴露在编辑器里。
为什么保存时没自动修复?检查 editor.codeActionsOnSave 是否启用
很多人以为装了插件就自动修复,其实 VSCode 默认不开启保存即修复。关键配置不是 eslint.autoFixOnSave(已废弃),而是 editor.codeActionsOnSave。
-
editor.codeActionsOnSave必须显式设置为{"source.fixAll.eslint": true},否则即使规则标记为可修复(如semi),也不会生效 - 如果同时启用了 Prettier,注意冲突:Prettier 负责格式,ESLint 负责逻辑和风格规则,二者不能都设为默认格式化工具;推荐用
eslint.format.enable关闭 ESLint 的格式能力,只让它做校验和修复 - 某些文件类型(如
.html中的<script></script>)需额外在eslint.validate中声明,否则不触发检查
eslint.validate 配置漏掉类型,HTML/JSX/Vue 里的 JS 就会静默失效
ESLint 默认只检查 .js 和 .jsx 文件。如果你项目里有内联脚本或单文件组件,必须手动扩展验证范围。
- 在工作区
settings.json中添加:"eslint.validate": ["javascript", "javascriptreact", "html", "vue"] - 对
.html支持需安装eslint-plugin-html并在.eslintrc.js的plugins数组中加入"html" - Vue 项目还需确认是否启用
eslint-plugin-vue,否则<template></template>或v-if相关规则不会生效
提交前拦截失败?lint-staged 不处理未暂存文件
Git Hooks 只作用于 git add 后暂存的文件。如果改完代码没 git add 就直接 git commit,lint-staged 根本收不到文件列表。
-
lint-staged配置中路径匹配要精确:"*.{js,jsx,ts,tsx}"不会匹配.vue,得单独加"*.vue" - Husky 的 hook 脚本必须放在
.husky/pre-commit,且该文件要有可执行权限(macOS/Linux 下需chmod +x .husky/pre-commit) - 若使用 pnpm,
lint-staged可能因包解析路径异常报Cannot find module 'eslint',此时应在配置中指定eslint的绝对路径或改用npx eslint
真正卡住人的往往不是配置本身,而是 VSCode 没读到你改过的 .eslintrc.js ——它缓存配置,改完规则后必须重启 VSCode 窗口,或者运行命令 ESLint: Restart ESLint Server,否则新规则形同虚设。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











