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

node:21.1.0-bookworm镜像中TypeScript运行报错求助

解决Node 21.1.0-bookworm容器中运行TypeScript服务的ERR_UNKNOWN_FILE_EXTENSION错误

在Node 21.1.0-bookworm镜像构建的容器中运行TypeScript服务时,出现如下错误:

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/index.ts

该服务在Node 18镜像中可正常运行,以下是针对性的解决方案:

方案1:升级tsx至兼容Node 21的版本

你当前使用的tsx 4.4.0版本可能存在与Node 21 ES模块机制的兼容性问题,建议升级到最新稳定版:

  1. 修改package.json中的tsx版本:
    "devDependencies": {
      "tsx": "^4.19.1",
      "ts-node": "^10.9.1",
      "typescript": "^5.3.2"
    }
    
  2. 重新构建Docker镜像,确保安装的是适配Node 21的tsx版本。

方案2:显式使用npx调用tsx

Docker容器中可能存在全局与本地依赖的路径冲突,直接调用tsx可能无法加载项目本地的tsx。修改package.json的启动脚本:

"scripts": {
  "start": "npx tsx watch src/index.ts"
}

此方式会强制使用项目node_modules目录下的tsx,避免全局依赖干扰。

方案3:调整tsconfig的模块解析配置

Node 21对ES模块的解析逻辑更严格,当前moduleResolution: "Bundler"配置更适合打包场景,而非直接运行。修改tsconfig.json:

"compilerOptions": {
  "target": "ESNext",
  "module": "NodeNext",
  "moduleResolution": "NodeNext",
  // 其他原有配置保持不变
}

确保module与moduleResolution字段匹配,适配Node 21的模块解析规则。

方案4:移除全局TypeScript安装

项目依赖的是本地TypeScript,全局安装并非必需,反而可能引发版本冲突。删除Dockerfile中的以下指令:

RUN npm install -g typescript

完成上述任一方案调整后,重新构建并运行容器,即可验证问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:05:14