vscode中eslint不报错、不修复、不高亮,大概率是未启动:需检查本地eslint是否安装(npx eslint --version)、语言模式是否正确(如javascript而非plain text)、配置文件是否被加载(通过eslint: show output确认)。

VSCode 里 ESLint 不报错、不修复、不高亮,大概率不是配置写错了,而是它根本没跑起来——插件只负责调用,真正干活的是你项目里的 eslint 可执行文件和配置文件。没装、没配对、没读到,就全是静默失效。
为什么 ESLint 根本不启动?检查这三件事
VSCode 的 ESLint 插件(dbaeumer.vscode-eslint)默认只找工作区根目录下的 node_modules/.bin/eslint。找不到就放弃,不会报错,也不会 fallback 到全局安装。
- 在终端运行
npx eslint --version,如果报错或无输出,说明本地eslint没装好;补装:npm install eslint --save-dev - 确认 VSCode 右下角语言模式正确:JS 文件要显示
JavaScript,TS 文件要显示TypeScript,不是Plain Text或拼错的javascriptreact - 打开命令面板(
Ctrl+Shift+P),运行ESLint: Show Output Channel,看日志里有没有Using configuration from—— 如果没有,说明配置文件压根没被加载
.eslintrc.js 不生效?CommonJS 和 parser 是关键
VSCode 插件对 ESM 支持不稳定,export default 或顶层 await 会导致配置加载失败;同时,TypeScript/JSX/Vue 文件必须显式指定解析器,否则连语法解析都卡住。
- 用
module.exports = {},别用export default;推荐后缀为.eslintrc.cjs,避免 Node.js 加载歧义 - TypeScript 项目必须配:
parser: "@typescript-eslint/parser",且装好@typescript-eslint/parser和@typescript-eslint/eslint-plugin - TS 规则(如
@typescript-eslint/no-unused-vars)依赖parserOptions.project,漏设等于规则不触发;填相对路径,例如"./tsconfig.json" - Vue 单文件组件需额外加
parserOptions.parser子项指向vue-eslint-parser,不能只靠parser
保存时自动修复没反应?不是开关没开,是链路断了
eslint.autoFixOnSave 已废弃多年,现在走 VSCode 统一的 Code Action 机制。但仅开启 "source.fixAll.eslint": true 不够,还要确保格式化入口和语言支持对齐。
- 必须在
settings.json中设:"editor.codeActionsOnSave": {"source.fixAll.eslint": true} - 对应语言的默认格式化工具要设为 ESLint 插件:
"editor.defaultFormatter": "dbaeumer.vscode-eslint"(针对[javascript]、[typescript]等语言标识) -
"editor.formatOnSave": true要打开,否则 Code Action 不触发;但若同时开了 Prettier,必须禁用它的formatOnSave,否则两者打架 - 只对标记为
fixable: true的规则生效(比如semi、quotes),no-console这类规则不会被自动删掉
用了 eslint.config.js 却不识别?Flat config 需手动启用
ESLint v8.22+ 引入扁平化配置 eslint.config.js,但 VSCode 插件默认不启用,尤其在多根工作区或 monorepo 下容易漏读。
- 在 VSCode 设置中搜
eslint.experimental.useFlatConfig,设为true - 确保导出的是数组:
export default [],不是module.exports = {} - 如果仍不生效,退回到
.eslintrc.cjs更稳妥;新格式目前对overrides、files匹配逻辑仍有兼容性问题 - monorepo 项目建议在每个 package 下单独配
.eslintrc.cjs,并用"eslint.workingDirectories"显式声明子目录
最常被忽略的一点:VSCode 自带的 JS/TS 语言服务会和 ESLint 同时报 no-unused-vars 这类错误,但它们的修复逻辑互不感知。不关掉 javascript.validate.enable 和 typescript.validate.enable,你会看到同一行两个波浪线、右键菜单里两套“快速修复”,而且改完一个另一个还在。











