Laravel项目部署到Heroku遭遇应用崩溃问题求助
问题分析
你的错误根源有两个:
- 依赖缺失:
if-env和concurrently这两个工具未在package.json中声明为依赖,Heroku构建时不会自动安装,导致启动脚本执行失败。 - 启动配置冲突:Laravel是PHP框架,你已通过Procfile指定用Apache(
heroku-php-apache2)启动项目,但package.json里的start脚本是Node.js项目的启动逻辑,两者配置不匹配。
解决方案
1. 安装缺失依赖
在本地项目根目录执行命令,将if-env和concurrently添加到开发依赖:
npm install if-env concurrently --save-dev
也可直接修改package.json的devDependencies部分,手动添加:
"devDependencies": { "@popperjs/core": "^2.11.6", "axios": "^0.27", "bootstrap": "^5.2.3", "laravel-vite-plugin": "^0.6.0", "lodash": "^4.17.19", "postcss": "^8.1.14", "sass": "^1.56.1", "vite": "^3.0.0", "if-env": "^1.0.4", "concurrently": "^7.6.0" }
2. 修正启动逻辑(核心)
Laravel是PHP项目,无需用Node.js的server.js启动,需调整启动配置消除冲突:
方案A:移除Node启动脚本(推荐)
保留Laravel默认的Vite前端脚本,删除Node相关的启动命令:
"scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview" }
此时Heroku会自动按照Procfile的配置启动Apache服务。
方案B:保留环境判断逻辑并适配PHP启动
若需保留环境判断,修改start:prod脚本为Apache启动命令:
"scripts": { "start": "if-env NODE_ENV=production && npm run start:prod || npm run start:dev", "start:prod": "vendor/bin/heroku-php-apache2 public/", "start:dev": "concurrently \"nodemon --ignore 'client/*'\" \"npm run dev\"" }
同时删除Procfile,让Heroku通过package.json的start脚本启动服务。
3. 添加前端编译脚本
确保Heroku部署时自动编译Laravel前端资源,在package.json的scripts中添加:
"heroku-postbuild": "npm run build"
4. 重新部署
修改完成后提交代码到Heroku:
git add . git commit -m "Fix dependencies and start configuration" git push heroku main
验证
部署完成后执行heroku logs --tail查看日志,确认无if-env: not found、concurrently: not found错误,且Apache服务正常启动。
内容的提问来源于stack exchange,提问作者Jan Henzl
相关产品推荐
相关产品推荐

