You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

环境键"jest/globals"未知:ESLint CLI与webpack-eslint-plugin表现差异排查

ESLint错误:Environment key "jest/globals" is unknown 解决思路

错误信息

Error: ../library/.eslintrc.js » ../app/.eslintrc.js » eslint-config-react-app/jest#overrides[0]:
    Environment key "jest/globals" is unknown

    at /home/project/node_modules/@eslint/eslintrc/lib/shared/config-validator.js:175:23
    at Array.forEach (<anonymous>)
    at ConfigValidator.validateEnvironment (/home/project/node_modules/@eslint/eslintrc/lib/shared/config-validator.js:169:34)
    at ConfigValidator.validateConfigArray (/home/project/node_modules/@eslint/eslintrc/lib/shared/config-validator.js:319:18)
    at CascadingConfigArrayFactory._finalizeConfigArray (/home/project/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:493:23)
    at CascadingConfigArrayFactory.getConfigArrayForFile (/home/project/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:299:21)
    at FileEnumerator._iterateFilesRecursive (/home/project/node_modules/eslint/lib/cli-engine/file-enumerator.js:481:49)
    at _iterateFilesRecursive.next (<anonymous>)
    at FileEnumerator.iterateFiles (/home/project/node_modules/eslint/lib/cli-engine/file-enumerator.js:296:49)
    at iterateFiles.next (<anonymous>)

项目结构

  • /home/project 包含两个目录:app、library
  • app是React主应用包
  • library是共享代码独立包,作为本地依赖安装到app中
  • app/.eslintrc.js 继承自react-app和react-app/jest
  • library/.eslintrc.js 继承自../app/.eslintrc.js并带有自定义覆盖配置

触发场景

在/home/project/app目录下运行npm run lint(命令执行eslint src ../library/src检查两个目录)时出现错误,但使用eslint-webpack-plugin检查相同目录时无此问题。

解决思路

1. 确保eslint-plugin-jest可被library目录访问

问题核心是ESLint找不到jest/globals对应的插件,因为library作为本地依赖,可能无法读取app目录下的node_modules插件:

  • 直接在library目录安装eslint-plugin-jest:npm i eslint-plugin-jest --save-dev
  • 或者在library的.eslintrc.js中添加模块解析路径,指向app的node_modules:
    module.exports = {
      settings: {
        nodePaths: ['../app/node_modules']
      },
      // 其他配置...
    }
    

2. 调整library的ESLint配置,排除不必要的jest环境

如果library不需要jest相关配置,可以在继承时覆盖或禁用jest环境:

  • 在library的.eslintrc.js中显式覆盖env:
    module.exports = {
      extends: '../app/.eslintrc.js',
      env: {
        // 保留原有env,禁用jest/globals
        'jest/globals': false
      },
      // 或者仅针对测试文件启用jest环境
      overrides: [
        {
          files: ['**/*.test.js', '**/*.spec.js'],
          env: {
            'jest/globals': true
          }
        }
      ]
    }
    

3. 修改lint命令,指定插件解析路径

在app目录运行lint命令时,给ESLint指定--resolve-plugins-relative-to参数,强制从app的node_modules加载插件:
修改package.json中的lint命令:

{
  "scripts": {
    "lint": "eslint src ../library/src --resolve-plugins-relative-to ."
  }
}

4. 对齐ESLint版本和配置

检查eslint-webpack-plugin使用的ESLint版本是否和CLI版本一致,版本差异可能导致解析逻辑不同。统一两者的ESLint及相关插件版本,避免兼容问题。

内容的提问来源于stack exchange,提问作者mariaines

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:35:22