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

ts-node启用ES模块时遇.ts扩展名错误,绝对路径配置受阻

解决Express ES模块+绝对路径的两难问题

场景1:修复ts-node开发模式的扩展名报错

你遇到的TypeError [ERR_UNKNOWN_FILE_EXTENSION]是配置冲突导致的,按以下步骤调整:

  1. 修改tsconfig的模块解析策略
    把moduleResolution从bundler改为node——bundler是给webpack/vite这类打包工具设计的,Node.js环境下的ES模块需要用node解析规则,同时补充目标版本确保兼容性:
"compilerOptions": {
    // ...其他原有配置
    "moduleResolution": "node",
    "target": "ES2020"
}
  1. 调整dev脚本参数
    修正nodemon和ts-node的执行参数,避免转义问题并明确ES模块模式:
"scripts": {
    // ...其他原有脚本
    "dev": "nodemon --watch src/**/*.ts --exec ts-node --esm --experimental-specifier-resolution=node src/index.ts"
}

同时保留tsconfig里的ts-node配置:

"ts-node": {
  "swc": true,
  "esm": true,
  "experimentalSpecifierResolution": "node"
}
  1. 检查依赖完整性
    确保安装了ts-node、@swc/core、@types/node、@types/express这些核心依赖,避免因缺失依赖导致的隐性报错。

场景2:修复tsc编译后绝对路径失效问题

如果想用concurrently + tsc watch + nodemon的方案,需要解决TSC不自动替换路径别名的问题:

  1. 安装路径转换工具
npm install tsconfig-paths --save-dev
  1. 修改运行脚本
    在start和dev脚本中加入路径注册,让Node.js识别TS里配置的别名:
"scripts": {
    "build": "npx tsc",
    "start": "node -r tsconfig-paths/register dist/index.js",
    "dev": "concurrently \"npx tsc --watch\" \"nodemon -q -r tsconfig-paths/register dist/index.js\"",
    // ...其他原有脚本
}
  1. 补充tsconfig配置
    添加rootDir指定源码目录,确保编译后的文件结构和路径映射匹配:
"compilerOptions": {
    // ...其他原有配置
    "rootDir": "./src"
}

通用注意事项

  • ES模块模式下,所有导入语句必须写全文件扩展名(比如.js),即使是TS文件也需要——编译后会自动转为对应JS文件,可在tsconfig中开启allowImportingTsExtensions仅用于开发阶段简化写法。
  • 把package.json的main字段改为编译后的入口文件,更符合生产环境规范:
"main": "./dist/index.js"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:56:26