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

使用Mocha+node-fetch+TypeScript测试时出现未知.ts扩展名错误

问题原因

你遇到的报错根源是node-fetch@3.x及以上版本为纯ESM包,仅支持ESModule加载模式。当代码中存在对该包的引入语句时,Node.js会自动切换到ESM加载流程,但你当前Mocha默认配置的是CommonJS模式的ts-node加载器,两种加载模式不兼容导致ts-node无法正常识别.ts后缀文件,哪怕你没有实际调用fetch相关代码,只要存在引入语句触发了ESM加载流程就会触发报错。

可行解决方案

方案1:降级node-fetch到v2版本(最简单,适配性最高)

node-fetch@2.x是兼容CommonJS的版本,不需要修改现有Mocha配置即可正常运行,执行以下命令安装即可:

npm install node-fetch@2
npm install @types/node-fetch@2 -D

方案2:调整配置适配ESM加载模式(需要保留node-fetch v3+时使用)

  1. 确认package.json中已设置"type": "module"
  2. 调整tsconfig.json配置,添加以下字段:
{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    // 其余原有配置保持不变
  },
  "ts-node": {
    "esm": true
  }
}
  1. 修改package.json中的test脚本,更换Mocha的加载器:
{
  "scripts": {
    "test": "mocha --loader=ts-node/esm test/**/*.spec.ts"
  }
}

方案3:使用内置fetch替代(Node.js 18+适用)

Node.js 18及以上版本已经内置了全局fetch API,不需要额外安装node-fetch包,直接删除node-fetch依赖、移除对应的import语句即可直接使用全局fetch,不会触发该兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:24:03