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

Heroku部署Node.js+MongoDB应用构建超时推送失败

问题原因

构建日志里明确输出了webpack is watching the files…,说明执行build命令时webpack默认开启了文件监听模式:打包完成后进程不会自动退出,会持续驻留监控本地文件变更。Heroku构建阶段会等待所有脚本执行完全退出才会进入后续流程,长时间等不到进程终止就会触发超时,直接终止构建。
另外当前服务端代码还有两个Heroku部署的适配问题,一起调整避免构建通过后服务启动失败。

修复方案

1. 关闭webpack构建的监听模式

修改package.json里的build脚本,显式关闭watch参数,让webpack打包完成后自动退出:

"scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "start": "node server/server.js",
  "build": "webpack -p --watch=false"
}

如果修改命令后还是出现watch模式的提示,直接在webpack配置文件中添加全局配置强制关闭:

module.exports = {
  // 保留原有的所有webpack配置
  watch: false
}

2. 适配Heroku动态端口规则

Heroku不会开放固定自定义端口,平台会动态分配可用端口存在PORT环境变量中,当前server.js里写死监听7452端口会导致服务启动失败,修改监听逻辑:

// 替换原来的app.listen(7452, ...)部分
const PORT = process.env.PORT || 7452;
app.listen(PORT, () => {
  console.log(`server live on port ${PORT}!`);
});

3. 注意环境变量配置

当前dotenv加载的是本地的config.env文件,这个文件不要提交到Git仓库,Heroku上的环境变量(比如MongoDB连接串DATABASE)直接在平台后台的Config Vars里配置即可,不需要上传本地配置文件。

验证

调整完上述配置后重新推送代码到Heroku,会看到webpack打包完成后进程正常退出,构建流程继续执行直到提示部署成功,访问服务地址就能正常调用接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:18:19