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模块机制的兼容性问题,建议升级到最新稳定版:
- 修改
package.json中的tsx版本:"devDependencies": { "tsx": "^4.19.1", "ts-node": "^10.9.1", "typescript": "^5.3.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
相关产品推荐
相关产品推荐

