Vercel生产构建失败:PrismaClient不存在companies属性,本地构建正常
解决Vercel构建时Prisma Client找不到companies属性的问题
问题场景
使用Next.js 13.0.3、TypeScript 4.9.3、Prisma ^4.6.1搭建MongoDB项目,本地构建正常,但Vercel生产构建时报错:
Type error: Property 'companies' does not exist on type 'PrismaClient<PrismaClientOptions, never, RejectOnNotFound | RejectPerOperation | undefined>'. 71 | }, 72 | companies: async () => { 73 | const companies = await prisma.companies.findMany(); 74 | return companies; 75 | }, 76 | },
本地TypeScript可正常识别companies为Prisma属性,添加该模型前生产构建正常,当前schema定义:
model companies { id String @id @default(auto()) @map("_id") @db.ObjectId v Int? @map("__v") name String }
解决方案
1. 给package.json添加postinstall命令
Vercel默认不会自动生成Prisma Client,需在package.json的scripts中添加:
"scripts": { "postinstall": "prisma generate" }
这样每次部署时,依赖安装完成后会自动生成适配当前schema的Prisma Client,确保生产环境的Client包含最新模型。
2. 固定Prisma版本
避免^4.6.1导致本地与Vercel安装的Prisma版本不一致,将package.json中的prisma和@prisma/client版本固定为4.6.1:
"dependencies": { "@prisma/client": "4.6.1" }, "devDependencies": { "prisma": "4.6.1" }
3. 清除Vercel构建缓存
Vercel的缓存可能复用旧的Prisma Client,可通过两种方式强制刷新:
- 部署时添加环境变量
VERCEL_CACHE=0 - 在Vercel项目的构建设置中勾选"Disable Build Cache",完成一次构建后再取消勾选
4. 验证模型命名映射(可选)
Prisma默认会将模型名转换为小驼峰格式,但如果模型是复数,需确认Client生成的属性名是否匹配。不过本地正常说明命名没问题,此步骤仅作排查备用。
内容的提问来源于stack exchange,提问作者Redskinsjo
相关产品推荐
相关产品推荐

