使用ts-node-esm导入本地TS模块时提示找不到模块的问题
问题排查与解决
1. Node.js ESM 强制要求导入路径带扩展名
Node.js 的 ES 模块(ESM)规范里,相对导入必须明确指定文件扩展名——TypeScript 的模块解析允许省略 .ts 扩展名,但 ts-node-esm 会严格遵循 Node.js ESM 的规则,不会自动补全扩展名。
解决:修改导入语句,加上 .ts 后缀:
import { getConfig } from "./config.ts";
2. tsconfig.json 配置未对齐 Node.js ESM 规则
检查你的 tsconfig.json 是否配置了正确的 ESM 相关选项,关键配置项:
compilerOptions.module需设为ESNext/ES2020+(匹配 Node.js 支持的 ESM 版本)compilerOptions.moduleResolution设为NodeNext或Node16(这两个模式严格对齐 Node.js 的 ESM/CJS 解析逻辑)- 项目根目录的
package.json必须添加"type": "module"(这是 Node.js 识别 ESM 项目的核心标记,很多人会遗漏)
示例正确配置片段:
{ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true, "strict": true, "rootDir": "./src" }, "include": ["src/**/*"] }
package.json 补充配置:
{ "type": "module" }
3. ts-node-esm 版本或缓存问题
旧版本的 ts-node-esm 存在模块解析 bug,先升级到最新版:
# 全局升级 npm install -g ts-node@latest typescript@latest # 或本地依赖升级 npm install ts-node typescript --save-dev
同时清理 ts-node 缓存:
ts-node --clear-cache
4. Windows 路径分隔符兼容问题
你使用的是 Windows 系统,尝试将运行命令里的反斜杠改为正斜杠:
ts-node-esm ./src/main.ts
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

