You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的关键配置:
    {
      "compilerOptions": {
        "module": "ESNext",
        "moduleResolution": "NodeNext",
        "esModuleInterop": true,
        "outDir": "./build",
        "rootDir": "./src",
        "resolveJsonModule": true
      },
      "include": ["src/**/*"],
      "exclude": ["node_modules", "build"]
    }
    
    这样TS编译后会自动将导入路径补全为带.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:35:14