You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest测试JS ES Modules工具时遇导入语法错误求助

解决Jest测试ESM模块时的SyntaxError: Cannot use import statement outside a module错误

以下是几个针对性的修复方案,按优先级尝试:

方案1:启用Node.js的ESM实验性支持

当项目通过package.json的"type": "module"声明为ESM模块时,Jest需要依赖Node.js的实验性ESM支持才能正常运行。修改package.json的测试脚本:

"scripts": {
  "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}

方案2:调整Jest与Babel的适配配置

若需要保留Babel转译,修改package.json中的Jest配置,让babel-jest兼容ESM:

"jest": {
  "transform": {
    "^.+\\.js$": ["babel-jest", { "useESM": true }]
  },
  "extensionsToTreatAsEsm": [".js"],
  "moduleNameMapper": {
    "^(\\.{1,2}/.*)\\.js$": "$1"
  }
}
  • useESM: true:告知babel-jest以ESM模式处理转译
  • extensionsToTreatAsEsm:明确将.js文件视为ESM模块
  • moduleNameMapper:处理ESM导入时必须添加的.js扩展名问题,避免测试中导入路径报错

方案3:移除Babel依赖(使用Jest原生ESM支持)

如果你的Node.js版本在v16及以上,可以直接使用Jest的原生ESM支持,无需Babel:

  1. 卸载Babel相关依赖:
npm uninstall --save-dev @babel/core @babel/preset-env babel-jest
  1. 删除babel.config.cjs文件

  2. 修改package.json的Jest配置:

"jest": {
  "transform": {},
  "extensionsToTreatAsEsm": [".js"],
  "moduleNameMapper": {
    "^(\\.{1,2}/.*)\\.js$": "$1"
  }
}
  1. 确保测试脚本添加了--experimental-vm-modules参数(同方案1)

额外检查点

  • 测试文件中的导入语句必须添加.js扩展名,ESM规范要求使用完整扩展名
  • 确认Jest版本在28.0.0以上,更早版本对ESM支持不完善

内容的提问来源于stack exchange,提问作者am3005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:57:43