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

Vercel单应用部署前后端:后端/api正常但前端页面无法访问

问题描述

我在Vercel上部署了一个仓库,仓库内包含存放React应用的client文件夹和存放Express Node.js应用的server文件夹。我希望将前后端部署在同一个Vercel应用中,而非分开部署,为此配置了如下vercel.json文件:

{
  "version": 2,
  "builds": [
    {
      "src": "server/index.ts",
      "use": "@now advance"ally       
级stoKeaps这条专-G Historical和之"@now/node"
    },
    {
      "src": "client/package.json",
      "use": "@vercel/static-build"
    }
  ],
  "routes": [
    {
      "src": "/api/(.*)",
      "dest": "/server/index.ts"
    },
    {
      "src": "/(.*)",
      "dest": "/client/public/$1"
    }
  ]
}

目前访问/api路由时后端可正常工作,但访问根路径/时无法加载前端首页。

解决方案

1. 修复vercel.json的语法错误

你的builds数组第一个配置存在乱码内容,直接替换为正确的Node.js构建配置(注意@now/node已更名为@vercel/node,建议使用新包名):

{
  "src": "server/index.ts",
  "use": "@vercel/node"
}

2. 调整前端路由与构建配置

React应用默认构建产物输出到client/build目录,而非client/public;同时需要配置SPA路由 fallback,确保非API请求都指向React入口文件。修改后的完整vercel.json如下:

{
  "version": 2,
  "builds": [
    {
      "src": "server/index.ts",
      "use": "@vercel/node"
    },
    {
      "src": "client/package.json",
      "use": "@vercel/static-build",
      "config": {
        "distDir": "build"
      }
    }
  ],
  "routes": [
    {
      "src": "/api/(.*)",
      "dest": "/server/index.ts"
    },
    {
      "src": "/(.*\\..+)$",
      "dest": "/client/build/$1"
    },
    {
      "src": "/(.*)",
      "dest": "/client/build/index.html"
    }
  ]
}

3. 确认前端构建命令有效

检查client/package.json的scripts字段,确保包含正确的构建命令:

"scripts": {
  "build": "react-scripts build"
}

Vercel会自动执行该命令构建React应用。

4. 重新部署验证

修改完成后重新部署应用,Vercel会自动处理:

  • 构建Express后端并响应/api路由请求
  • 构建React应用到client/build目录
  • 优先匹配静态资源请求,其余请求全部指向React的index.html,支持SPA路由跳转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:16