VSCode中ESLint不报错、不标红、不修复,根本原因是未启动:需确认本地eslint已安装(npx eslint --version)、语言模式正确、配置文件被加载(ESLint: Show Output验证),且插件调用的是本地而非全局包。

VSCode 里 ESLint 不报错、不标红、保存也不修复,基本可以断定:它根本没跑起来,不是规则写错了,而是压根没加载到你的配置或本地 eslint 包。
确认 ESLint 插件正在调用本地包
VSCode 的 ESLint 插件(dbaeumer.vscode-eslint)只是个“转发器”,真正干活的是你项目里的 node_modules/.bin/eslint。它不会 fallback 到全局安装,也不会自动识别父目录的配置。
- 检查右下角状态栏,点击 ESLint 图标——如果显示 “Using globally installed ESLint”,说明没走本地
- 运行
npx eslint --version,若报错,说明依赖没装好,或用了 pnpm/yarn 2+ 隔离模式,需在settings.json中显式设"eslint.packageManager": "pnpm" - 打开命令面板(Ctrl+Shift+P),执行
ESLint: Show Output Channel,日志里出现Failed to load config或Cannot find module,就是解析器/插件缺失或路径不对
选对配置文件名和导出格式
截至 2026 年 5 月,VSCode ESLint 插件对新格式 eslint.config.js(Flat Config)的支持仍不稳定,尤其在多根工作区或 monorepo 中容易漏读配置。
- 生产项目优先用
.eslintrc.js或.eslintrc.cjs,必须用module.exports = {},不能用export default - 若坚持用
eslint.config.js,确保插件版本 ≥ v2.4.0,并在settings.json中加"eslint.experimental.useFlatConfig": true - 切勿同时存在
.eslintrc.*和eslint.config.js——插件会冲突报错,直接拒绝启动 - 配置中务必写
root: true,否则 ESLint 会向上递归找父目录配置,导致规则意外覆盖
让 TS/JSX/.vue 文件真正被校验
ESLint 默认只认纯 JS 语法。遇到 .ts、.tsx、.vue 就会卡在解析阶段,连规则都不进,更别说报错了。
- TypeScript 项目:装
@typescript-eslint/parser和@typescript-eslint/eslint-plugin,配置中设parser: '@typescript-eslint/parser',并加parserOptions.project: './tsconfig.json'(否则类型相关规则如@typescript-eslint/no-unused-vars不生效) - React/JSX:在
parserOptions中启用ecmaFeatures.jsx: true,并加入plugins: ['react', 'react-hooks'] - Vue 单文件组件:需额外装
vue-eslint-parser,并在parserOptions.parser子项中为.vue文件指定它 - 确保
files或overrides显式覆盖了**/*.ts、**/*.tsx、**/*.vue,否则 ESLint 根本不会处理这些文件
保存时自动修复要配对两个开关
eslint.autoFixOnSave 已被彻底废弃。现在自动修复由 VSCode 的通用代码操作机制接管,必须同时满足语言识别 + 格式化工具绑定 + 代码动作开启三者才生效。
- 在
.vscode/settings.json中写入:"editor.codeActionsOnSave": { "source.fixAll.eslint": true } - 确保对应语言的默认格式化工具设为 ESLint 插件:
"editor.defaultFormatter": "dbaeumer.vscode-eslint"(针对javascript、typescript等语言分别配置) - 确认
editor.formatOnSave已开启(它本身不触发 ESLint 修复,但某些旧版行为依赖它) - 注意:只有带 ✅ 标记的规则才支持自动修复(如
semi、quotes),no-console这类规则不会被删掉console.log
最容易被忽略的是 parserOptions.project 路径是否真实存在、是否被 VSCode 工作区正确识别,以及多语言项目中 eslint.validate 是否显式列出了所有需要检查的语言类型(如 ["javascript", "typescript", "vue"])。这些点一漏,ESLint 就静默失效,连错误日志都不抛。

















