Node.js工作区ts-node运行.ts文件遇扩展名及模块查找问题求助
问题解决方案
针对你遇到的两个错误,分别给出具体修复步骤:
1. 解决ERR_UNKNOWN_FILE_EXTENSION错误
根目录package.json设置了"type": "module",意味着整个项目采用ESM模块规范,而默认的ts-node运行模式是CommonJS,两者不兼容导致扩展名识别失败。需要让ts-node以ESM模式运行:
- 修改
tsconfig.json,添加ts-node的ESM配置:
{ "compilerOptions": { "moduleResolution": "node16", // 替换原有的node,适配ESM解析规则 "module": "ES2022", // 保持原有配置或改为ESNext均可 "esModuleInterop": true, "target": "ES2022", "skipLibCheck": true, "resolveJsonModule": true }, "ts-node": { "esm": true // 强制启用ESM模式 } }
- 使用正确的运行命令:
npx ts-node --esm ./WebAPI/server.ts
2. 解决模块找不到的错误
这个错误有两个核心原因:
原因1:ESM规范要求显式文件扩展名
ESM模式下,导入文件必须添加.ts扩展名,修改你的导入语句:
import { RegisterUserPresenter } from "../Presenters/RegisterUserPresenter.ts";
原因2:运行命令的路径错误
你之前用的ts-node-esm src/webapi/server.ts路径不对——你的项目结构里没有src目录,正确路径应该是./WebAPI/server.ts。
可选优化:避免每次加扩展名
如果不想每次导入都写扩展名,可以在tsconfig.json的ts-node配置里添加:
"ts-node": { "esm": true, "experimentalSpecifierResolution": "node" // 模拟Node.js的CommonJS解析逻辑,允许省略扩展名 }
额外检查
- 确认
WebAPI/Presenters/RegisterUserPresenter.ts文件真实存在,路径大小写要和导入语句一致(Linux/macOS环境区分大小写) - 如果你是直接运行源码而非rollup编译后的文件,确保所有导入路径都指向源码文件,而非
build目录下的编译产物
内容的提问来源于stack exchange,提问作者khteh
相关产品推荐
相关产品推荐

