部署TypeScript Express.js应用至Heroku遇Exit status 127错误求助
解决Heroku部署Express+TypeScript应用崩溃问题
核心问题分析
Exit status 127(tsc未找到)
Heroku生产环境默认仅安装package.json中dependencies下的包,若typescript被放在devDependencies里,部署阶段不会被安装,导致执行tsc命令时找不到可执行文件。
Exit status 1(npx装错tsc包)
直接使用npx tsc时,若本地无可用的tsc,npx会自动安装第三方的tsc包(版本2.0.4),这并非官方TypeScript编译器,因此触发报错。
H10错误(App crashed)
这是应用启动失败的连锁反应,只要解决tsc的构建问题,应用能正常启动后,H10错误会自动消失。
具体解决方法
方法1:将typescript移至dependencies
修改package.json,把typescript从devDependencies移到dependencies字段:
{ "dependencies": { "typescript": "^x.x.x", // 其他项目依赖... } }
提交修改后的代码到Heroku,部署时会自动安装typescript,tsc命令即可正常执行。
方法2:指定本地tsc路径
在build命令中直接调用node_modules/.bin下的tsc,确保使用项目本地安装的编译器:
{ "scripts": { "build": "./node_modules/.bin/tsc --build tsconfig.json", "prestart": "npm run build", "start": "node dist/index.js" // 替换为你实际的编译后入口文件路径 } }
注意:此方法需确保typescript在dependencies中,或让Heroku安装dev依赖。
方法3:让Heroku临时安装dev依赖
通过设置环境变量,让Heroku在部署阶段安装devDependencies:
heroku config:set NPM_CONFIG_PRODUCTION=false
或者添加heroku-postbuild脚本,完成构建后清理dev依赖:
{ "scripts": { "heroku-postbuild": "npm install --only=dev && npm run build && npm prune --production" } }
此方式会先安装dev依赖完成构建,再移除dev依赖以减小部署体积。
修正npx命令(不推荐,仅作备选)
若坚持使用npx,需明确调用官方typescript包:
{ "scripts": { "build": "npx typescript --build tsconfig.json" } }
同样需确保typescript在项目依赖中,避免npx安装错误的包。
验证步骤
- 本地执行
npm install确保依赖安装完整 - 运行
npm run build和npm start,确认应用能正常启动 - 提交修改后的代码到Heroku,查看部署日志确认构建成功
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

