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

Node.js从16升级到20后出现ERR_REQUIRE_ESM及后续报错求助

解决方案

问题根源

  1. 初始ERR_REQUIRE_ESM错误:升级后file-type已变为纯ESM模块,而你的项目默认使用CommonJS(CJS)模式。ts-node在CJS模式下会将import语法转换为require()调用,但Node.js禁止用require()加载ESM模块,因此触发报错。
  2. 添加"type": "module"后的错误:开启ESM模式后,Node.js无法自动识别.ts文件的模块格式,需要配置ts-node和TypeScript以适配ESM环境下的TypeScript文件解析。

具体修复步骤

1. 更新核心依赖

确保ts-node和typescript版本支持ESM特性:

yarn add ts-node typescript @types/node --dev

2. 修改tsconfig.json配置

调整TypeScript编译选项以适配ESM:

{
  "compilerOptions": {
    "target": "ES2020", // 最低支持ES2020以兼容ESM特性
    "module": "ESNext", // 输出ESM格式代码
    "moduleResolution": "Bundler", // 适配Node.js的ESM解析逻辑(或用"NodeNext")
    "esModuleInterop": true,
    "skipLibCheck": true,
    "strict": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

3. 调整启动命令

在package.json的scripts中修改dev命令,添加ts-node的ESM运行标志:

{
  "scripts": {
    "dev": "nodemon --watch src/**/* --ext ts --exec ts-node --esm src/index.ts"
  }
}

关键是--esm参数,让ts-node以ESM模式处理TypeScript文件。

4. 确认package.json配置

确保package.json中已开启ESM模式:

{
  "type": "module"
}

验证

执行yarn run dev,服务应正常启动,模块相关错误将被解决。

内容的提问来源于stack exchange,提问作者The Blind Hawk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:25:09