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

TypeScript+Node.js中如何无后缀用ES6语法导入模块?

解决Node.js + TypeScript ES模块目录导入报错问题

问题根源

Node.js 的 ES 模块解析规则中,直接导入目录(如./config)时,不会自动查找目录下的index.js文件,除非目录内存在package.json并指定入口文件,或者导入时明确指定文件名(如./config/index.js)。你的 TypeScript 编译后生成的代码保留了./config的导入路径,导致 Node 抛出ERR_UNSUPPORTED_DIR_IMPORT错误。

解决方案

1. 给目标目录添加package.json

在src/config目录下创建package.json文件,内容如下:

{
  "type": "module",
  "main": "./index.js"
}

TypeScript 编译时会将该文件复制到dist/config目录下,Node 解析./config目录时,会读取这个package.json并自动加载index.js。

2. 调整tsconfig.json的模块解析配置

修改tsconfig.json中的module和moduleResolution字段,使其严格遵循 Node.js 的 ES 模块解析规则:

{
  "compilerOptions": {
    // ... 其他原有配置
    "module": "nodenext",
    "moduleResolution": "nodenext"
  }
}

nodenext模式会让 TypeScript 完全对齐 Node.js 的模块解析行为,确保编译后的导入路径能被 Node 正确识别,同时允许你在源码中使用无后缀的导入语法。

3. 验证开发与生产环境

  • 生产环境:执行npm run start,编译后的代码会配合目录下的package.json完成正确导入。
  • 开发环境:ts-node/esm配合nodenext的模块解析配置,能直接识别无后缀的目录导入,无需额外修改启动命令。

注意:避免使用--experimental-specifier-resolution=node启动 Node,该参数为实验性特性,不推荐用于生产环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:52:50