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

NX Monorepo中NestJS API无法部署至Vercel求助

NX Monorepo 部署 NestJS 到 Vercel 出现404/Serverless错误的解决方案

一、修正 vercel.json 配置

Monorepo 环境下,Vercel 需要明确指定 Serverless 函数的入口路径与构建规则,以下是适配你的项目结构的配置示例:

{
  "buildCommand": "nx run backend:build:production",
  "outputDirectory": "dist/apps/backend",
  "functions": {
    "dist/apps/backend/main.js": {
      "runtime": "@vercel/node@3"
    }
  },
  "routes": [
    {
      "src": "/(.*)",
      "dest": "dist/apps/backend/main.js"
    }
  ]
}

关键注意点:

  • buildCommand 直接调用 NX 的后端构建命令,避免触发全 Monorepo 构建
  • functions 指向编译后的 NestJS 入口文件,确保 Vercel 识别为 Serverless 函数
  • routes 配置将所有请求转发到 NestJS 服务入口

二、调整 NestJS 构建配置

检查 nx.json 中后端项目的构建目标,确保生成必要的产物文件:

{
  "targets": {
    "build": {
      "executor": "@nx/node:build",
      "options": {
        "outputPath": "dist/apps/backend",
        "main": "apps/backend/src/main.ts",
        "tsConfig": "apps/backend/tsconfig.app.json",
        "generatePackageJson": true,
        "packageJson": "apps/backend/package.json"
      },
      "configurations": {
        "production": {
          "optimization": true,
          "extractLicenses": true,
          "inspect": false
        }
      }
    }
  }
}

必须开启 generatePackageJson: true,否则 Vercel 无法在构建产物中识别 Node 项目依赖,导致部署失败。

三、Vercel 控制台项目配置检查

  1. Framework Preset 选择 Other,避免 Vercel 自动检测 Monorepo 结构时出错
  2. Build Command 手动设置为 nx run backend:build:production,覆盖自动生成的命令
  3. Output Directory 设置为 dist/apps/backend,与 NX 构建输出路径一致
  4. 确认环境变量(如数据库连接串)已在 Vercel 控制台配置并启用,且与本地 .env 内容匹配

四、适配 Serverless 运行时的 NestJS 入口

修改 apps/backend/src/main.ts,适配 Vercel 的 Serverless 请求模型:

import { NestFactory } from '@nestjs/core';
import { ExpressAdapter } from '@nestjs/platform-express';
import { AppModule } from './app.module';
import express from 'express';

const server = express();

async function bootstrap() {
  const app = await NestFactory.create(AppModule, new ExpressAdapter(server));
  app.enableCors();
  await app.init();
}

bootstrap();

export default server;

这种方式直接导出适配 Express 的服务器实例,符合 Vercel Node Runtime 的要求,避免因启动逻辑不兼容导致的 Serverless 错误。

五、验证本地构建产物

本地执行 nx run backend:build:production 后,检查 dist/apps/backend 目录:

  • 确认存在 main.js 入口文件
  • 确认自动生成了 package.json 文件
  • 检查 package.json 中的依赖是否完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:09:53