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

Jest与Babel配置为ESM时运行报错问题求助

错误原因

当你在package.json中设置"type": "module"后,所有.js文件会被Node.js默认识别为ECMAScript模块(ESM)。而Jest默认通过同步方式调用Babel API加载配置文件,但ESM模块的加载逻辑本身是异步的,Babel的同步API无法兼容ESM格式的配置文件,因此触发该错误——核心矛盾就是Jest的同步加载逻辑和ESM配置的异步要求不匹配。

可行解决办法

不用把babel.config.js转为CommonJS或JSON,试试这几个方案:

方案1:让babel-jest启用异步配置加载

在你的Jest配置文件(比如jest.config.mjs,因为package.json设了type: module,所以用ESM格式)中,给babel-jest添加asyncConfig: true配置,明确告诉它异步加载Babel配置:

export default {
  transform: {
    '^.+\\.(js|jsx)$': [
      'babel-jest',
      {
        configFile: './babel.config.js',
        asyncConfig: true
      }
    ]
  }
};

方案2:将babel.config.js改为异步导出函数

Babel本身支持异步配置函数,把你的ESM配置改成异步导出的函数形式,就能适配Jest的异步加载需求:

export default async () => {
  return {
    presets: ['@babel/preset-env'],
    // 你的其他Babel配置项
  };
};

方案3:使用Jest的实验性ESM支持flag

运行Jest时加上--experimental-vm-modules参数,开启Jest对ESM模块的实验性支持,这个参数能让Jest更好地处理ESM格式的配置文件:

jest --experimental-vm-modules

如果不想每次手动加参数,可以把这个命令写到package.json的scripts里:

{
  "scripts": {
    "test": "jest --experimental-vm-modules"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:22:52