Node.js从16升级到20后出现ERR_REQUIRE_ESM及后续报错求助
解决方案
问题根源
- 初始
ERR_REQUIRE_ESM错误:升级后file-type已变为纯ESM模块,而你的项目默认使用CommonJS(CJS)模式。ts-node在CJS模式下会将import语法转换为require()调用,但Node.js禁止用require()加载ESM模块,因此触发报错。 - 添加
"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
相关产品推荐
相关产品推荐

