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

Node v20.5.1运行npm run dev报.ts未知扩展名错误求助

解决Node.js 20.5.1下运行npm run dev出现的.ts文件扩展名未知错误

问题背景

运行npm run dev时触发错误:TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts",当前Node版本为20.5.1。已尝试全局重装TypeScript、使用ts-node --esm启动,但问题仍未解决。

配置核心冲突分析

从提供的文件来看,问题根源在于模块系统配置不一致:

  • tsconfig.json中compilerOptions.module设为CommonJS,但ts-node配置开启了esm: true,两种模块规范混合导致TS文件解析异常。
  • package.json的dev脚本直接调用nodemon src/server.ts,nodemon默认无法处理TypeScript文件,未指定TS执行器。

具体解决方案

1. 统一模块系统配置

修改tsconfig.json,消除CommonJS与ESM的冲突,二选一即可:

方案一:保持CommonJS规范

{
  "compilerOptions": {
    "target": "es6",
    "module": "CommonJS",
    "outDir": "./dist",
    "rootDir": "src",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "moduleResolution": "node",
    "skipLibCheck": true,
    "plugins": [
      {
        "transform": "typescript-transform-paths"
      }
    ]
  },
  "include": ["src/**/*.ts"], // 修正路径范围,仅监听src目录下的TS文件
  "exclude": ["node_modules"],
  "ts-node": {
    "esm": false // 关闭ESM模式,与CommonJS匹配
  }
}

方案二:切换为ESM规范

{
  "compilerOptions": {
    "target": "es6",
    "module": "ESNext", // 改为ESM模块
    "moduleResolution": "node16", // 适配Node.js 16+的ESM解析逻辑
    "outDir": "./dist",
    "rootDir": "src",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "plugins": [
      {
        "transform": "typescript-transform-paths"
      }
    ]
  },
  "include": ["src/**/*.ts"],
  "exclude": ["node_modules"],
  "ts-node": {
    "esm": true
  }
}

同时修改package.json,添加ESM声明:

{
  "name": "name-project",
  "version": "1.0.0",
  "type": "module", // 声明项目采用ESM规范
  "main": "server.js",
  // 其余配置不变
}

2. 调整dev脚本,让nodemon正确处理TS文件

修改package.json的scripts.dev,指定用ts-node执行TS文件:

  • 若用CommonJS方案:
"scripts": {
  // 其余脚本不变
  "dev": "nodemon --exec ts-node src/server.ts"
}
  • 若用ESM方案:
"scripts": {
  // 其余脚本不变
  "dev": "nodemon --exec ts-node --esm src/server.ts"
}

3. 验证依赖版本兼容性

当前ts-node@10.9.1兼容typescript@4.8.4,若问题仍存在,可尝试升级ts-node:

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

测试验证

修改完成后,重新运行npm run dev,检查错误是否消失。


内容的提问来源于stack exchange,提问作者João Pablo Vilanir De Melo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:05:57