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

NestJS部署至Vercel时Serverless函数调用失败求助

NestJS部署Vercel报错:模块未找到导出内容的解决方案

问题原因

本地运行npm run start:dev正常,但Vercel部署后报错No exports found in module "../src/main.js",本质是Vercel的Node运行时要求导出HTTP请求处理函数(如Express实例),而NestJS默认启动逻辑是直接启动独立HTTP服务器,没有导出符合Vercel要求的处理函数。

解决步骤

1. 修改src/main.ts,导出请求处理函数

调整启动逻辑,区分本地开发与Vercel生产环境:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

// 存储Express实例供Vercel调用
let appHandler;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.init();
  
  // 获取Express适配器实例,作为Vercel需要的处理函数
  appHandler = app.getHttpAdapter().getInstance();
  
  // 本地开发环境正常启动HTTP服务器
  if (process.env.NODE_ENV === 'development') {
    await app.listen(process.env.PORT || 3000);
  }
}

bootstrap();

// 导出给Vercel运行时使用
export default appHandler;

2. 更新vercel.json配置

Vercel需处理编译后的JavaScript文件,同时指定build命令完成TypeScript编译:

{
  "version": 2,
  "buildCommand": "npm run build",
  "builds": [
    {
      "src": "dist/main.js",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "dist/main.js",
      "methods": ["GET", "POST", "PUT", "DELETE"]
    }
  ]
}

3. 确认package.json的build命令

确保package.json包含正确的Nest编译命令:

{
  "scripts": {
    "build": "nest build",
    "start:dev": "nest start --watch"
    // 其他脚本保持不变
  }
}

4. 配置Vercel环境变量

将本地.env文件中的环境变量(如数据库连接字符串、JWT密钥等)复制到Vercel项目的Settings -> Environment Variables中,保证生产环境能正常访问依赖服务。

验证部署

重新触发Vercel部署,完成后访问URL即可正常处理请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:43:40