如何最小化配置让Jest支持ES模块import语法?
解决Jest中ES模块import语句报错的最小化配置
针对Node 22.8.0 + Jest 29.7.0 + ts-jest 29.2.5环境,只需以下几步修改即可让import语句正常工作:
1. 配置package.json启用ES模块
在项目根目录的package.json中添加"type": "module"字段,告诉Node.js默认将所有文件视为ES模块:
{ "type": "module", // 其他已有字段... }
2. 调整TypeScript配置(针对TS项目)
修改tsconfig.json,确保模块系统和解析策略适配ES模块:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2022", // 匹配Node 22支持的ES版本 // 其他已有配置... } }
3. 创建ES模块格式的Jest配置文件
将Jest配置文件命名为jest.config.mjs(启用ES模块后不能用.js后缀),内容如下:
export default { preset: 'ts-jest/presets/default-esm', // 使用ts-jest的ES模块预设 testEnvironment: 'node', // 解决TS中ES模块导入需要加.js后缀的问题 moduleNameMapper: { '^(\\.{1,2}/.*)\\.js$': '$1' }, extensionsToTreatAsEsm: ['.ts'] };
4. 调整测试文件的导入路径(可选)
在TypeScript测试文件中,导入本地模块时需符合Node.js ES模块规范加上.js后缀,例如:
// 正确写法 import { sum } from './sum.js';
若不想加后缀,上述jest.config.mjs中的moduleNameMapper会自动映射掉.js后缀,两种写法均可生效。
完成以上步骤后,运行jest命令即可正常执行使用import语句的测试。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

