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

内置Express服务的Vue3 SSR应用部署Heroku端口绑定失败如何解决

问题根本原因

你遇到的R10错误核心原因是Vue CLI打包服务端代码时,内置的DefinePlugin会在构建阶段把代码里的process.env.*变量替换为构建阶段的环境变量值,变成硬编码写入serverBundle.js,而不是保留运行时读取逻辑。Heroku的PORT环境变量是运行阶段才注入的,构建阶段不存在,所以打包后的代码里端口配置无效。另外如果Express服务监听时绑定了localhost,也会导致Heroku无法检测到端口绑定成功。

解决方案步骤

1. 调整vue.config.js配置,保留PORT运行时读取

修改服务端构建的Webpack配置,禁止打包工具预替换process.env.PORT变量:

// vue.config.js 核心修改部分
module.exports = {
  // 保留你原有的其他配置
  chainWebpack: webpackConfig => {
    // 仅服务端构建生效
    if (process.env.WEBPACK_TARGET === 'node') {
      webpackConfig.plugin('define').tap(args => {
        // 移除DefinePlugin中对PORT的预定义,保留运行时读取逻辑
        delete args[0]['process.env'].PORT
        return args
      })
    }
  }
}

2. 调整.env文件配置

把你根目录.env文件里的PORT=8080配置移到.env.local文件中,.env.local仅用于本地开发,不会被提交到代码仓库,也不会在Heroku构建阶段被加载。

3. 修改Express服务监听逻辑

调整端口取值和监听地址,兼容Heroku运行环境要求:

const port = process.env.PORT || 8080
// 必须监听0.0.0.0,不能绑定localhost,否则Heroku无法检测端口绑定
server.listen(port, '0.0.0.0', () => {
  console.log(`Application is accessible on : http://localhost:${port}`)
})

4. 配置Heroku启动命令

在package.json的scripts字段中添加正确的启动指令:

{
  "scripts": {
    "start": "node dist/server/serverBundle.js",
    // 保留你原有的build等其他脚本配置
  }
}
本地验证方法

构建完成后在本地执行命令PORT=3000 node dist/server/serverBundle.js,检查服务是否正常监听3000端口,验证通过后推送到Heroku即可正常部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:36:00