遭遇ts-node报错:未知文件扩展名.ts,ESM模块兼容问题求助
解决ESM模式下ts-node启动报错ERR_UNKNOWN_FILE_EXTENSION及循环警告问题
方案1:配置ts-node原生ESM支持
- 安装必要依赖:
npm install -D ts-node @types/node typescript - 修改
tsconfig.json,添加ts-node的ESM适配配置:{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true, "skipLibCheck": true, "outDir": "./dist" }, "ts-node": { "esm": true } } - 更新package.json的启动脚本:
"scripts": { "start": "ts-node --esm src/index.ts" }
方案2:屏蔽loader实验性警告循环
如果必须使用loader方式启动,执行命令时直接屏蔽指定警告:
node --loader ts-node/esm --no-warnings=ExperimentalWarning src/index.ts
同时在package.json中补充配置:
"ts-node": { "loader": "ts-node/esm", "experimentalSpecifierResolution": "node" }
方案3:换用tsx替代ts-node(推荐)
tsx对ESM的支持更完善,无需复杂配置:
- 安装tsx:
npm install -D tsx - 替换启动脚本:
"scripts": { "start": "tsx src/index.ts" }
额外排查项
- 确保项目中没有混合使用CommonJS(
require)和ESM(import)语法,避免模块解析冲突。 - 检查所有相对导入路径都添加了文件扩展名(ESM规范强制要求)。
- 清理依赖缓存后重装,避免版本冲突:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者ASG4
相关产品推荐
相关产品推荐

