eslint装了但没标红,需确认三件事:右下角语言模式为javascript/typescript react、根目录存在.eslintrc.cjs或.eslintrc.js、settings.json中启用"eslint.enable":true且禁用"eslint.format.enable"。

ESLint 装了但没标红?先确认这三件事
VSCode 本身不检测 JS 潜在风险,ESLint 插件必须满足三个前提才能亮波浪线:项目有配置、语言模式对、设置没关开关。
- 右下角状态栏必须显示
JavaScript React或TypeScript React——纯JavaScript模式会跳过 JSX 中的props类型校验和 Hook 规则 - 项目根目录必须存在
.eslintrc.cjs(推荐)或.eslintrc.js;.eslintrc(无后缀)会被完全忽略 -
settings.json中需显式启用:"eslint.enable": true;同时必须设"eslint.format.enable": false,否则和 Prettier 冲突导致修复失效
为什么 getName() 调用未定义函数不报错?
这不是插件坏了,而是规则没开。默认 eslint:recommended 启用了 no-undef,但仅当变量/函数在当前作用域未声明时触发——如果它被动态挂到 window 上,或出现在 eval、with 块里,no-undef 就沉默。
- 检查
.eslintrc.cjs是否包含"no-undef": "error",且env中没误开browser: true(这会让window.getName被视为合法) - 若用 TypeScript,
no-undef实际由类型系统接管,此时必须开启"compilerOptions.strict": true,否则const userNmae = 'x'这类拼写错误也不会标红 -
no-unused-vars和no-shadow可辅助暴露命名疏漏,但它们不查运行时是否存在,只查词法作用域
想查 XSS、硬编码密钥、危险 eval?得加安全规则集
ESLint 默认不扫描安全漏洞,@eslint-community/eslint-plugin-security 或 eslint-plugin-no-unsanitized 才是关键。但装完插件 ≠ 自动生效。
- 在
.eslintrc.cjs的extends中加入"plugin:security/recommended",并确保plugins: ["security"] - 规则如
security/detect-object-injection会标记obj[ userInput ],但对JSON.parse(input)默认不报——需手动加security/detect-non-literal-fs-filename - 避免误报:用
// eslint-disable-next-line security/detect-object-injection注释临时绕过,而不是全局禁用整条规则 - 注意兼容性:
eslint-plugin-security在 ESLint v9+ 中需配合eslint-plugin-jsdoc才能正确解析 JSDoc 类型注释
别指望插件自动发现业务逻辑漏洞
像 if (user.role === 'admin') { } else { api.deleteUser() } 这种逻辑缺陷,ESLint 和所有静态分析插件都无能为力——它不知道 user.role 是否可能为 null,也不知道 deleteUser 是否该放在 else 分支执行。
这类问题只能靠单元测试覆盖边界条件,或用 TypeScript 的 NonNullable<typeof user.role></typeof> + 严格类型断言提前暴露空值风险。插件能做的极限,是提醒你写了 user?.role === 'admin' 却忘了处理 undefined 分支。











