You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MERN Stack应用部署至Heroku时触发ELIFECYCLE报错问题求助

报错原因
  • 核心错误是日志中输出的sh: 1: run: not found:你在heroku-postbuild脚本中使用了独立的run指令,Linux系统没有原生run命令,npm执行自定义脚本的正确格式为npm run [脚本名称],错误的命令写法直接触发了找不到命令的报错。
  • 脚本存在无效逻辑:NPM_CONFIG_PRODUCTION=false npm install npm属于多余操作,重复安装npm不会优化部署流程,反而会增加构建耗时。
  • 额外注意:你当前的start脚本用了nodemon启动服务,nodemon是开发环境用的热重载工具,生产环境不需要,也可能引发Heroku部署的额外报错。
解决方案

根据你的部署习惯选择对应方案即可:

方案1:使用本地提前构建好的React产物部署

你已经提到本地build产物可以正常运行,不需要在Heroku端重复构建,直接修改后端package.json的scripts配置:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js",
    "heroku-postbuild": ""
}

同时在后端入口文件app.js中添加静态资源托管逻辑,关联React构建产物:

const express = require('express')
const path = require('path')
const app = express()

// 托管React构建产物的静态资源
app.use(express.static(path.join(__dirname, '../build')))
// 所有非接口请求返回React入口文件,支持前端路由
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, '../build/index.html'))
})

方案2:让Heroku自动执行前端构建流程

如果不想本地提前打包,希望推送代码后Heroku自动构建前端,需要调整heroku-postbuild脚本(假设前端代码存放在后端同级的client目录中):

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js",
    "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false cd ../client && npm install && npm run build"
}

内容的提问来源于stack exchange,提问作者Nigel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:54:08