jest测试引入pupa包报错Cannot use import statement outside a module如何解决
解决方案
- 首先修正
transformIgnorePatterns配置,你当前的配置匹配的是@pupa域下的包,但pupa本身不属于任何npm组织,正确配置如下:
transformIgnorePatterns: [ `node_modules/(?!(pupa)/)`, ],
该配置会让jest对pupa包进行代码转换,避免直接读取其ESM格式的源码触发导入错误。
- 确认Babel转换配置正常
如果你项目使用babel-jest作为转换工具,需要保证babel.config.js中配置了可转换ES模块的预设,示例配置如下:
module.exports = { presets: [ ['@babel/preset-env', { targets: { node: 'current' } }] ] }
- 适配Jest高版本的ESM规则
如果你使用Jest 28及以上版本,还可以在jest配置中添加以下字段:
extensionsToTreatAsEsm: ['.js'],
如果你的项目package.json中没有设置"type": "module",也可以在测试代码中改用动态导入的方式加载pupa:
const pupa = (await import('pupa')).default
- 兜底兼容方案
pupa 从 3.0 版本开始仅提供 ESM 格式产物,如果你不想大幅修改现有测试配置,可以直接降级使用pupa的2.x版本,该版本同时支持ESM和CommonJS格式:
npm install pupa@2
内容的提问来源于stack exchange,提问作者VickyR
相关产品推荐
相关产品推荐

