如何为ts-jest导入ts-gaussian配置moduleNameMapper?
解决方案
- 先配置tsconfig.json
打开项目的tsconfig.json文件,在compilerOptions中开启esModuleInterop,消除运行警告:
{ "compilerOptions": { "esModuleInterop": true, // 其余原有配置保持不变 } }
- 配置jest参数
找到项目的jest配置文件,通常是项目根目录的jest.config.js,或者package.json中的jest字段,添加如下配置:
若使用jest.config.js:
module.exports = { // 其余原有配置保持不变 moduleNameMapper: { "^ts-gaussian$": require.resolve("ts-gaussian") }, transformIgnorePatterns: [ "node_modules/(?!ts-gaussian/)" ] }
若在package.json中配置jest:
{ "jest": { "moduleNameMapper": { "^ts-gaussian$": "<rootDir>/node_modules/ts-gaussian/dist/index.esm.js" }, "transformIgnorePatterns": [ "node_modules/(?!ts-gaussian/)" ] } }
如果你的项目是monorepo结构,依赖安装在仓库根目录的node_modules中,调整moduleNameMapper中的路径匹配仓库根目录的ts-gaussian入口文件即可。
其中moduleNameMapper作用是直接将导入的ts-gaussian模块名映射到实际安装的包入口,避免jest路径解析失败;transformIgnorePatterns是让jest转换ts-gaussian的代码,因为ts-gaussian默认输出ESM格式,jest默认不会转换node_modules下的ESM代码,会导致解析失败。
配置完成后重新执行npm test,测试即可正常运行。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

