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

Jest无法解析node_modules下存在的core-utils模块问题求助

解决Jest无法解析嵌套依赖core-utils的问题

我之前也碰到过类似的情况,核心原因是Jest的模块解析逻辑和Create React App默认使用的Webpack不一样:运行React应用时,Webpack会递归遍历所有嵌套的node_modules目录查找依赖,但Jest默认只会优先查找项目根目录的node_modules,不会自动深入到其他包的node_modules里,所以才会出现运行正常但测试报错的矛盾情况。

下面是几个可行的解决方案,你可以根据自己的项目情况选择:

方案1:让Jest知晓嵌套依赖的路径

直接在Jest配置里添加modulePaths,明确告诉它去core-ui的node_modules目录找core-utils:

  • 如果你的项目还未eject,直接在package.json中追加Jest配置:
    {
      // 其他package.json内容...
      "jest": {
        "modulePaths": [
          "<rootDir>/node_modules/core-ui/node_modules"
        ]
      }
    }
    
  • 如果已经eject或者使用了自定义Jest配置文件(比如jest.config.js),就把modulePaths加入配置:
    module.exports = {
      // 其他配置项...
      modulePaths: [
        '<rootDir>/node_modules/core-ui/node_modules'
      ]
    };
    

方案2:用moduleNameMapper直接映射模块

如果core-utils是安装在项目根目录node_modules中的包,你可以给它做一个精准的路径映射,让Jest直接定位到目标:
在package.json的Jest配置中添加:

{
  "jest": {
    "moduleNameMapper": {
      "^core-utils$": "<rootDir>/node_modules/core-utils"
    }
  }
}

这个配置会强制Jest把所有导入core-utils的请求,直接指向项目根目录的对应包。

方案3:Mock掉core-utils(无需实际功能时)

如果你的测试不需要用到core-utils里的Logging功能,完全可以Mock这个模块,彻底绕开解析问题:

  • 要么在测试文件顶部直接Mock:
    jest.mock('core-utils', () => ({
      Logging: {
        log: jest.fn() // 用空函数替代实际的log方法
      }
    }));
    
  • 要么在项目根目录创建__mocks__/core-utils.js文件,Jest会自动识别并使用这个Mock:
    module.exports = {
      Logging: {
        log: jest.fn()
      }
    };
    

补充说明

再强调一次核心差异:Webpack会递归遍历所有层级的node_modules,不管依赖是顶层还是嵌套在其他包里;但Jest默认只会查找顶层node_modules,这就是为什么应用能正常运行但测试会报错的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:49:13