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

如何将Node.js 16的TypeScript项目转为ES Module并解决运行报错

解决TypeScript Node.js项目转ES Module后nodemon启动报错问题

问题根源

当在package.json中设置"type": "module"后,Node.js切换到ES模块加载模式,但该模式默认无法识别.ts文件扩展名,常规ts-node调用未配置对应ES模块加载器,因此触发ERR_UNKNOWN_FILE_EXTENSION错误。

解决方案步骤

1. 补全依赖安装

确保安装ts-node及Node.js类型依赖(未安装则执行):

npm install ts-node @types/node --save-dev

2. 完善tsconfig.json配置

在已有配置基础上补充ES模块解析规则:

{
  "compilerOptions": {
    "module": "ES2020",
    "target": "ES2020",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "outDir": "./dist",
    "strict": true,
    "skipLibCheck": true
  },
  "include": ["**/*.ts"],
  "exclude": ["node_modules"]
}
  • moduleResolution: "node":让TypeScript遵循Node.js的ES模块路径解析规则
  • outDir:指定编译产物输出目录,区分源码与编译文件

3. 配置nodemon的ES模块启动方式

方式一:命令行直接启动

替换原启动命令为:

nodemon --exec "node --loader ts-node/esm app.ts"

--loader ts-node/esm用于告知Node.js使用ts-node的ES模块加载器处理.ts文件。

方式二:使用nodemon配置文件

创建nodemon.json文件并写入:

{
  "watch": ["**/*.ts"],
  "ext": "ts,json",
  "exec": "node --loader ts-node/esm app.ts"
}

之后直接运行启动命令:

nodemon

4. 修正源码导入路径

ES模块要求导入时使用完整文件扩展名,示例:

// 错误写法
import { someFunc } from './utils';

// 正确写法
import { someFunc } from './utils.ts';

ts-node/esm会在编译阶段自动将.ts替换为.js扩展名。

验证

启动nodemon后,若不再出现ERR_UNKNOWN_FILE_EXTENSION错误且项目正常运行,说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:10:30