环境键"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
相关产品推荐
相关产品推荐

