Node.js无法导入同目录文件:TS编译后运行报错求助
Node无法识别TypeScript编译后的模块导入问题
问题详情
项目目录结构
ghostbot(主项目目录) - package.json - package-lock.json - src/ -- (*.ts 文件) - build/ -- (编译后的 *.js 文件) - node_modules/ - tsconfig.json
npm启动脚本
"scripts": { "start": "npx tsc --rootDir src --outDir build && node build/index.js" },
错误信息
执行npm start后,TypeScript编译正常,但Node启动时报错:
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '[...]\ghostbot\build\setup' imported from [...]\ghostbot\build\index.js
WebStorm能正常解析编译后index.js中的./setup导入路径,但Node无法识别,手动执行编译和启动命令、切换到build目录运行、使用绝对路径均无效。
解决方法
1. 配置ES模块相关参数
Node对ES模块的导入要求必须带完整文件扩展名,需同步调整TS配置和package.json:
- 在
package.json中添加"type": "module",明确项目使用ES模块 - 修改
tsconfig.json的关键配置:
这样TS编译后会自动将导入路径补全为带{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "esModuleInterop": true, "outDir": "./build", "rootDir": "./src", "resolveJsonModule": true }, "include": ["src/**/*"], "exclude": ["node_modules", "build"] }.js扩展名的格式,符合Node的ES模块要求。
2. 确认编译文件完整性
检查build目录下是否存在setup.js文件:
- 如果不存在,检查
tsconfig.json的include配置是否包含了src/setup.ts,避免TS漏编译该文件 - 手动执行
npx tsc后查看build目录,确认所有需要的文件都已生成
3. 核对导入路径大小写
Windows文件系统不区分大小写,但Node在模块解析时会严格匹配路径大小写:
- 确保
src/index.ts中的导入路径(如./setup)与实际文件名(setup.ts)大小写完全一致 - 避免出现文件名是
Setup.ts但导入写./setup的情况
4. 调整Node执行参数(可选)
如果暂时无法修改模块配置,可以在启动命令中添加参数强制Node使用宽松的解析规则:
"scripts": { "start": "npx tsc --rootDir src --outDir build && node --experimental-specifier-resolution=node build/index.js" }
但不推荐长期使用,建议优先通过配置ES模块来彻底解决问题。
内容的提问来源于stack exchange,提问作者Ewa Wójcik
相关产品推荐
相关产品推荐

