Jest绝对路径导入entities模块报Cannot find module,改名正常求解决
解决Jest中Feature-Sliced Design规范下
entities目录绝对路径导入报错问题 问题背景
- 遵循Feature-Sliced Design规范,使用绝对路径
import { counterReducer, CounterStateSchema } from 'entities/Counter';导入模块时,Jest抛出Cannot find module 'entities/Counter'错误 - 将
entities目录重命名为任意其他名称(如aaaa、entity)后,Jest测试可正常通过 - Webpack、Storybook等其他工具无导入异常,仅Jest出现问题
- 改用相对路径导入时,Jest测试可正常执行
问题原因
Jest的模块解析逻辑会优先在moduleDirectories配置的node_modules目录中查找非相对路径的导入模块,而npm仓库中恰好存在名为entities的第三方包,导致Jest误将entities/xxx的导入请求指向node_modules中的第三方包,而非项目src目录下的自定义entities目录。
解决方案
在Jest配置的moduleNameMapper中添加显式映射规则,强制Jest将entities/开头的导入解析到项目src下的对应目录:
修改后的Jest配置片段
moduleNameMapper: { '\\.(jpg|jpeg|png|gif|svg)$': '<rootDir>/config/jest/mocks/file.js', '\\.s?css$': 'identity-obj-proxy', // 新增映射规则,指定entities的解析路径 '^entities/(.*)$': '<rootDir>/src/entities/$1' },
验证效果
修改配置后,保留entities目录名称,使用原绝对路径导入语句执行Jest测试,即可正常通过,无需调整目录结构或改用相对路径。
内容的提问来源于stack exchange,提问作者alles
相关产品推荐
相关产品推荐

