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

配置create-react-app ejected项目测试时绝对路径报错:无法找到模块

解决Create React App(Eject后)+ TypeScript中Jest无法识别绝对路径导入的问题

我之前在 eject 后的 CRA + TS 项目里也碰到过一模一样的问题——调试时绝对路径导入好好的,一跑 Jest 测试就报「Cannot find module」,折腾了一会儿才搞定,分享下我的解决方案:

核心原因

TypeScript 编译器会读取 tsconfig.json 里的 baseUrl 来解析绝对路径,但 Jest 作为独立的测试运行器,不会自动继承 tsconfig 的路径配置,所以得单独给 Jest 配置路径映射。

步骤1:确认 tsconfig 配置正确

先确保你的 tsconfig.json 里的 baseUrl 确实指向 ./src,比如:

{
  "compilerOptions": {
    "baseUrl": "./src",
    // 其他编译配置(比如 target、lib 等)...
  },
  // 其他配置...
}

步骤2:配置 Jest 路径映射

Eject 后,项目根目录会生成 jest.config.js(或者你也可以在 package.json 的 jest 字段里配置),这里提供两种方式:

方式一:修改 jest.config.js

在配置文件中添加 modulePaths 和(可选)moduleNameMapper:

module.exports = {
  // 保留原有的 Jest 配置(比如 setupFilesAfterEnv、testEnvironment 等)
  modulePaths: ['<rootDir>/src'], // 告诉 Jest 把 src 目录当作模块根目录
  // 如果你的绝对路径有特定前缀(比如你用的 `framework/`),可以用更精确的映射:
  moduleNameMapper: {
    '^framework/(.*)$': '<rootDir>/src/framework/$1'
  },
  // 确保 Jest 能处理 TypeScript 文件
  transform: {
    '^.+\\.(ts|tsx)$': 'ts-jest',
  },
  testMatch: [
    '**/__tests__/**/*.+(ts|tsx|js)',
    '**/?(*.)+(spec|test).+(ts|tsx|js)',
  ],
};

方式二:在 package.json 中配置 Jest

如果你的项目把 Jest 配置写在 package.json 里,就修改 jest 字段:

"jest": {
  // 原有配置...
  "modulePaths": ["<rootDir>/src"],
  "moduleNameMapper": {
    "^framework/(.*)$": "<rootDir>/src/framework/$1"
  },
  "transform": {
    "^.+\\.(ts|tsx)$": "ts-jest"
  }
}

步骤3:安装必要依赖

Eject 后的项目可能需要手动安装 ts-jest 来让 Jest 处理 TypeScript:

npm install --save-dev ts-jest @types/jest

如果你用 Enzyme 做测试,还要确保适配器和类型依赖安装正确(以 React 17 为例):

npm install --save-dev enzyme enzyme-adapter-react-17 @types/enzyme @types/enzyme-adapter-react-17

然后在 src/setupTests.ts 里配置 Enzyme:

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-17';

configure({ adapter: new Adapter() });

验证修复

运行你的测试命令(比如 npm test),应该就能正常识别绝对路径导入了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:01:03