将TypeScript+Node.js服务部署至render.com遇文件扩展名错误
解决Render.com部署TypeScript+Node.js服务的文件扩展名错误
错误原因
直接用node app.ts启动服务,Node.js原生不支持解析.ts文件扩展名,触发ERR_UNKNOWN_FILE_EXTENSION错误。从日志可见Render使用了node app.ts作为启动命令,而非你配置的ts-node-dev app.ts。
解决方案
1. 更新package.json配置
修改scripts字段,添加编译脚本并调整启动逻辑,确保生产环境运行编译后的JavaScript文件:
{ "name": "server", "version": "1.0.0", "description": "", "main": "dist/app.js", // 改为编译后的入口文件 "scripts": { "dev": "ts-node-dev app.ts", // 保留开发环境热重载脚本 "build": "tsc", // 添加TypeScript编译命令 "start": "node dist/app.js", // 生产环境启动编译后的JS "test": "echo \"Error: no test specified\" && exit 1" }, // 其余依赖配置保持不变 }
2. 优化tsconfig.json配置
确保include字段覆盖所有需要编译的TypeScript文件,若项目有多个TS文件,建议调整为:
{ "compilerOptions": { "module": "commonjs", "esModuleInterop": true, "target": "es6", "strict": true, "moduleResolution": "node", "sourceMap": true, "outDir": "dist" }, "include": ["**/*.ts"], // 覆盖所有TS文件 "exclude": ["node_modules"] }
3. 配置Render的部署命令
在Render的服务配置页面,设置:
- Build Command:
npm install && npm run build - Start Command:
npm start
Render会先安装所有依赖,编译TypeScript到dist目录,再运行编译后的app.js文件,避免直接运行TS文件的错误。
额外说明
ts-node-dev是开发环境热重载工具,生产环境无需使用,直接运行编译后的JS文件性能更优。- 若Render构建时无法找到
tsc命令,可将typescript从devDependencies移至dependencies中。
内容的提问来源于stack exchange,提问作者programmer
相关产品推荐
相关产品推荐

