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 控制台项目配置检查
- Framework Preset 选择
Other,避免 Vercel 自动检测 Monorepo 结构时出错 - Build Command 手动设置为
nx run backend:build:production,覆盖自动生成的命令 - Output Directory 设置为
dist/apps/backend,与 NX 构建输出路径一致 - 确认环境变量(如数据库连接串)已在 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
相关产品推荐
相关产品推荐

