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

Jest测试Node.js组件报错:node_modules中import语句无法使用求助

解决Jest测试中node-fetch的ES模块语法错误问题

问题根源

你遇到的错误是因为node-fetch(v3+版本)本身是ES模块,使用了import语法,但Jest默认会忽略对node_modules目录下文件的转译,导致无法识别ES模块语法。你之前配置的transformIgnorePatterns目标错误——node:http是Node.js内置模块,根本不在node_modules里,所以这个规则对解决问题毫无作用。

解决方案

1. 修正Jest的transformIgnorePatterns配置

需要让Jest不对node-fetch进行转译忽略,也就是把它从默认的node_modules忽略列表中排除,让babel-jest去转译它的ES模块语法。修改package.json中的Jest配置:

"jest": {
  "transform": {
    "^.+\\.[t|j]sx?$": "babel-jest"
  },
  "transformIgnorePatterns": [
    "/node_modules/(?!node-fetch)"
  ]
}

2. 确保Babel配置支持ES模块转译

检查你的Babel配置文件(比如babel.config.json或.babelrc),确保包含@babel/preset-env,并配置为针对你的Node.js版本转译:

{
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "current"
      }
    }]
  ]
}

如果还没安装相关依赖,执行以下命令安装:

npm install --save-dev @babel/core @babel/preset-env babel-jest

3. 可选:切换Jest到ESM模式(适合Node.js 16+)

如果你的项目本身已经使用ES模块(package.json中设置了"type": "module"),可以直接让Jest启用ESM模式,无需转译:

  • 在package.json中添加:
"jest": {
  "moduleFileExtensions": ["js", "mjs"],
  "transform": {},
  "extensionsToTreatAsEsm": [".js"]
},
"type": "module"

验证

修改完成后,重新执行npm test,应该就能正常识别node-fetch的ES模块语法,不再抛出SyntaxError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:24:19