Node.js应用部署Heroku失败 本地运行正常该如何排查解决?
问题排查与解决方案
- 校验入口文件路径与大小写
先确认package.json中scripts.start字段配置的node server.js路径和实际文件路径完全一致,本地Windows/macOS环境默认对文件名大小写不敏感,而Heroku使用的Linux环境大小写敏感,如果实际文件名为Server.js和配置的server.js大小写不匹配,会直接导致启动失败。 - 排查依赖声明问题
本地已安装依赖不代表所有运行时依赖都写入了dependencies字段,若有依赖被误写入devDependencies,Heroku默认部署时不会安装这部分依赖,会导致运行时报错。你可以本地执行npm ci --only=production模拟Heroku的生产环境安装流程,再执行启动脚本,就能快速验证是否为依赖缺失问题。 - 修正端口监听配置
不要在server.js中写死监听端口,Heroku会通过环境变量process.env.PORT动态分配端口,写死端口会导致进程无法正常绑定端口被判定启动失败,正确写法参考:app.listen(process.env.PORT || 3000, () => { console.log('服务启动成功') }) - 查看完整运行日志定位具体错误
当前日志仅显示启动脚本执行失败,未输出代码运行时的具体报错,执行heroku logs --tail命令可以查看实时完整日志,直接定位到具体报错的代码位置。 - 匹配Node.js版本
可在package.json中添加engines字段声明本地使用的Node.js和npm版本,避免Heroku默认使用的版本和本地版本不一致导致兼容问题,示例配置:{ "engines": { "node": "16.x", "npm": "8.x" } }
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

