node.js代码未被eslint校验,是因为配置中缺失env: { node: true },导致eslint默认按浏览器环境解析,无法识别require等node全局变量;同时需确保文件后缀(如.cjs)被正确识别、解析器适配,并在vscode中启用对应语言验证。

为什么 Node.js 代码没被 ESLint 校验?
VSCode 默认不校验 node 环境下的代码,哪怕你写了 require、__dirname 或用了 fs 模块,ESLint 也会跳过——除非你在配置里明确告诉它“这是 Node 脚本”。否则它默认只当普通浏览器 JS 处理,require is not defined 这类报错就是典型信号。
常见现象:命令行运行 npx eslint script.js 正常报错,但 VSCode 里打开同一文件却毫无波浪线。根本原因不是插件没装,而是 ESLint 没激活 node 环境支持。
- 检查
.eslintrc.js中是否包含env: { node: true }—— 缺失即失效 - 不要只写
browser: true或留空env,Node 脚本和浏览器脚本环境互斥 - 若用
eslint.config.js(Flat Config),需在languageOptions里显式加ecmaVersion: 'latest'和sourceType: 'module',再通过files匹配**/*.js并设置processor(如需处理.cjs)
如何让 ESLint 正确解析 CommonJS 文件(.cjs)?
Node.js 项目常用 .cjs 后缀区分 CommonJS 模块,但 ESLint 默认只识别 .js,且默认解析器 espree 不支持 require 语法——直接报 Parsing error: Unexpected token。
必须做两件事:扩展文件后缀识别 + 换解析器。
- 在 VSCode 设置中补全
eslint.validate:确保包含"javascript",并确认当前文件右下角语言模式是javascript(不是plaintext或javascriptreact) - 在
.eslintrc.js里设parserOptions.sourceType: 'script'(而非module),因为.cjs文件默认是script类型 - 若项目同时混用
.js(ESM)和.cjs(CommonJS),别强行统一 parser;改用overrides分开配置:overrides: [ { files: ['*.cjs'], parserOptions: { sourceType: 'script' } }, { files: ['*.js'], parserOptions: { sourceType: 'module' } } ]
VSCode 里 no-console 为什么只标灰不报错?
ESLint 规则默认级别是 off,eslint:recommended 里 no-console 是 warn,而 VSCode 的问题面板默认折叠 warn 级别,状态栏也不提示——看起来像没生效。
这不是配置失败,是 VSCode 对警告的默认静音策略。
- 想让它变红(
error级别):在.eslintrc.js的rules里写"no-console": "error" - 只想局部禁用(比如日志脚本):用注释
// eslint-disable-next-line no-console,比全局关规则更安全 - 检查是否被
overrides覆盖:比如你给test/**/*.js设了"no-console": "off",但当前文件路径匹配该规则,就会失效
保存时自动修复对 Node.js 代码有效吗?
可以,但仅限 ESLint 原生支持 --fix 的规则,比如 semi、quotes、indent。像 no-process-exit 或 no-sync 这类涉及逻辑判断的规则,VSCode 保存时不会动一行代码——它只修格式,不改逻辑。
关键要配对两个设置:
-
"editor.codeActionsOnSave": { "source.fixAll.eslint": true }—— 必须手写进.vscode/settings.json,图形界面勾选无效 -
"editor.defaultFormatter": "dbaeumer.vscode-eslint"—— 确保 VSCode 把 JS 文件的格式化权交给 ESLint 插件,否则fixAll不触发 - 务必关掉
"editor.formatOnSave": false,否则 Prettier 或内置格式化器会抢在 ESLint 之前乱改缩进/引号,导致修复冲突
最后提醒:Node.js 脚本常含 process.exit()、console.error() 等合法用法,别盲目开 no-process-exit 或 no-console 全局 error 级别——先看团队规范,再调规则粒度。











