Vercel部署时Prisma查询出现UserWhereInput类型错误
问题描述
本地运行正常的Next.js + Prisma API接口,部署到Vercel生产环境时出现如下类型错误:
Type error: Type '{ activated: true; }' is not assignable to type 'UserWhereInput'. Object literal may only specify known properties, and 'activated' does not exist in type 'UserWhereInput'.
activated字段已在Prisma Schema中定义,但TypeScript无法识别该字段。相关代码如下:
../api/alert.ts
// ../api/alert.ts import type { NextApiRequest, NextApiResponse } from "next"; import prisma from "../../lib/prisma"; export default async function handler( req: NextApiRequest, res: NextApiResponse ) { if (req.method === "POST") { try { const { authorization } = req.headers; if (authorization === `Bearer ${process.env.API_SECRET_KEY}`) { // 验证调用API的服务权限 // 获取所有已激活用户 const activeUsers = prisma.user.findMany({ where: { activated: true }, }); // 其他操作 res.status(200).json({ success: true }); } else { res.status(401).json({ success: false }); } } catch (err) { res.status(500).json({ statusCode: 500 }); } } else { res.setHeader("Allow", "POST"); res.status(405).end("Method Not Allowed"); } }
schema.prisma
... model User { id String @id @default(cuid()) phone String createdAt DateTime @default(now()) activated Boolean @default(false) Message Message[] }
/lib/prisma.ts
import { PrismaClient } from "@prisma/client"; let prisma: PrismaClient; if (process.env.NODE_ENV === "production") { prisma = new PrismaClient(); } else { let globalWithPrisma = global as typeof globalThis & { prisma: PrismaClient; }; if (!globalWithPrisma.prisma) { globalWithPrisma.prisma = new PrismaClient(); } prisma = globalWithPrisma.prisma; } export default prisma;
解决方法
1. 重新生成Prisma客户端
修改schema.prisma后,必须重新生成客户端代码才能让TypeScript识别新增字段。本地执行:
npx prisma generate
将生成的类型定义文件(位于node_modules/@prisma/client)同步到版本库,确保部署时使用最新的类型。
2. 修改Vercel构建命令
在package.json的scripts中,确保build命令包含Prisma生成步骤:
{ "scripts": { "dev": "next dev", "build": "prisma generate && next build", "start": "next start" } }
这样Vercel在构建生产环境时会自动生成最新的Prisma客户端,避免使用旧的类型定义。
3. 清理缓存重新部署
如果Vercel缓存了旧的依赖或构建产物,会导致类型未更新。进入Vercel项目的"Deployments"页面,找到最新部署记录,点击"Redeploy"并勾选"Clear build cache"。
4. 确认依赖配置
确保@prisma/client是生产依赖,避免部署时缺失:
npm install @prisma/client --save
内容的提问来源于stack exchange,提问作者yumba
相关产品推荐
相关产品推荐

