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

如何在Node.js中规范导入文件以适配tsc构建与ts-node-dev运行?

解决方案

你遇到的是TS不同模块规范下开发、构建场景的路径后缀匹配差异问题,不需要手动修改导入路径,按照你使用的模块规范调整配置即可:

注:如果你的项目使用CommonJS规范(package.json中没有"type": "module"字段),不需要做下述ESM适配,只需要将tsconfig.json的module和moduleResolution都设为CommonJS,导入路径不需要写后缀,开发和构建阶段都可以自动识别文件。

如果你用的是ES模块规范,统一使用.js后缀写导入路径,按以下步骤配置:

1. 升级依赖版本

你当前使用的ts-node 9.1.1、ts-node-dev 1.1.8版本较低,默认不支持将.js后缀的导入映射到同名.ts源文件,先执行更新:

npm install ts-node@latest ts-node-dev@latest --save-dev

2. 修改tsconfig.json配置

在配置文件中新增/修改以下字段:

{
  "compilerOptions": {
    // 其他原有配置保持不变
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    // 若你的TS版本低于5.0,可删除下一行配置
    "allowImportingTsExtensions": true
  },
  "ts-node": {
    "esm": true,
    "experimentalSpecifierResolution": "node"
  }
}

3. 调整启动命令

给ts-node-dev的启动命令添加--esm参数,示例:

ts-node-dev --esm src/main.ts

配置完成后,所有导入路径统一写.js后缀即可:开发环境ts-node-dev会自动将.js后缀的导入匹配到同名.ts源文件,tsc构建后的JS文件也可以直接在Node环境正常运行,不需要任何路径修改。

常见问题排查

  • 若仍提示模块不存在,检查导入路径的大小写是否和实际文件完全一致,ESM模式下Node的模块解析严格区分大小写,和Windows系统默认的文件名大小写不敏感逻辑不同。
  • 不要给ts-node-dev添加--no-file-extension这类禁用后缀识别的启动参数。

内容的提问来源于stack exchange,提问作者Crapaud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:18:00