如何为Node.js项目配置ts-jest?配置遇阻求助
Node.js + ts-jest 配置错误解决指南
问题根源
你遇到的两个错误本质是模块解析规则不匹配和jest配置未适配NodeNext模块系统:
- 测试代码里导入
.js后缀文件,但实际源文件是.ts,NodeNext模式要求扩展名严格匹配; - dist目录下编译后的ES模块被jest加载,而jest默认CommonJS环境无法识别
import语法。
分步解决
1. 修正测试文件导入路径
把测试文件里的:
import { parseStartTime } from "./time.js";
改成:
import { parseStartTime } from "./time.ts";
或者依赖后续jest配置自动处理.js后缀(见步骤3)。
2. 调整tsconfig.json
在compilerOptions中补充配置,适配ts-jest的模块解析逻辑:
{ "compilerOptions": { // 原有配置保留... "moduleResolution": "NodeNext", "allowImportingTsExtensions": true, "noEmit": true // 测试阶段无需编译TS文件,ts-jest会直接处理 } }
如果需要保留生产代码编译能力,可以单独创建tsconfig.test.json继承主配置,仅覆盖noEmit等测试相关选项。
3. 更新jest.config.js
适配NodeNext模块系统,同时排除dist目录避免干扰:
/** @type {import('ts-jest').JestConfigWithTsJest} **/ export default { testEnvironment: "node", transform: { "^.+\\.[tj]sx?$": ["ts-jest", { tsconfig: "./tsconfig.json", useESM: true // 启用ES模块支持 }] }, moduleFileExtensions: ["ts", "js", "json"], testMatch: ["**/?(*.)+(spec|test).ts"], moduleNameMapper: { "^(\\.{1,2}/.*)\\.js$": "$1" // 自动移除导入路径中的.js后缀 }, roots: ["<rootDir>/src"], testPathIgnorePatterns: ["/dist/"] // 忽略dist目录下的文件 };
4. 同步package.json模块类型
如果你的项目使用ES模块,在package.json中添加:
"type": "module"
NodeNext模式下,package.json的type会直接影响模块解析行为,需和tsconfig配置保持一致。
5. 清理并重新测试
删除dist目录,避免残留的编译文件干扰jest:
rm -rf dist
然后运行测试:
npx jest
内容的提问来源于stack exchange,提问作者Legion
相关产品推荐
相关产品推荐

