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
相关产品推荐
相关产品推荐

