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

如何配置Jest使其支持ES6 Modules运行?

错误根因

你遇到的报错核心是package.json中配置了"type": "module",Node.js默认将所有.js后缀文件识别为ES模块,但Jest默认运行逻辑依赖CommonJS模块语法(如module、require),两套规范混用触发了报错。你已配置的Babel仅对开发环境生效,未适配Jest运行环境,因此出现开发正常、测试报错的情况。

可行解决方案

提供两种常用的适配方案,可根据你的项目情况选择:


方案一:使用Jest原生ESM支持(Jest 27及以上版本适用)

Jest 27+已提供实验性的原生ES模块支持,不需要额外转译,配置步骤如下:

  • 修改package.json中的test执行脚本,根据你的运行环境选择对应配置:
    • Linux/Mac环境:"test": "NODE_OPTIONS=--experimental-vm-modules jest"
    • Windows CMD环境:"test": "set NODE_OPTIONS=--experimental-vm-modules && jest"
    • Windows PowerShell环境:"test": "$env:NODE_OPTIONS=\"--experimental-vm-modules\"; jest"
  • 新增/修改Jest配置文件,因为"type": "module"的项目中Jest默认会把.js配置文件识别为ES模块,建议将配置文件命名为jest.config.cjs,内容如下:
module.exports = {
  testEnvironment: "node",
  // 关闭默认转译,直接使用原生ESM
  transform: {}
}

方案二:通过Babel转译ESM为CommonJS(兼容性更好)

如果不想使用实验性特性,可以通过Babel将测试环境的ES模块转译为CommonJS供Jest使用,配置步骤如下:

  • 修改Babel配置文件(.babelrc.json/babel.config.json),新增test环境的适配规则:
{
  "env": {
    "test": {
      "presets": [
        ["@babel/preset-env", {
          "targets": { "node": "current" },
          // 强制将ESM转译为CommonJS
          "modules": "commonjs"
        }]
      ]
    }
  }
}
  • 新增/修改jest.config.cjs配置文件,指定转译规则:
module.exports = {
  testEnvironment: "node",
  transform: {
    "^.+\\.js$": "babel-jest"
  }
}

注意事项

  • 不要在代码中混用ES模块语法(import/export)和CommonJS语法(require/module.exports),统一使用ES模块语法即可
  • 若当前使用的Jest版本低于27,建议先升级到最新稳定版本,旧版本对ESM的支持存在较多已知问题

内容的提问来源于stack exchange,提问作者Carlos Aguilar Duarte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:21:04