我正在使用 typescript 和 prisma 在 vercel 上构建一个 nextjs 项目。 版本: “下一个”:“13.0.3” “打字稿”:“4.9.3” “棱镜”:“^4.6.1”
build 在本地通过,但在 vercel 上失败:
Type error: Property 'companies' does not exist on type 'PrismaClient<PrismaClientOptions, never, RejectOnNotFound \| RejectPerOperation \| undefined>'.
--
01:05:17.287 |
01:05:17.287 | 71 \| },
01:05:17.288 | 72 \| companies: async () => {
01:05:17.288 | > 73 \| const companies = await prisma.companies.findMany();
01:05:17.289 | \| ^
01:05:17.289 | 74 \| return companies;
01:05:17.289 | 75 \| },
01:05:17.289 | 76 \| },
而 typescript 将“公司”检测为 prisma 的属性 尝试重新生成 Prisma 客户端,删除模型,然后使用:prisma 格式、prisma 生成、prisma db 推送。 我正在使用 mongodb
./prisma/schema.prisma
model companies {
id String @id @default(auto()) @map("_id") @db.ObjectId
v Int? @map("__v")
name String
}
在添加这个新模型之前生产版本已通过
您需要确保
npx prisma generate
是构建过程的一部分。
在 package.json 中,您可以在构建过程中定义生成命令,如下所示:
{
"name": "deployment-example-prisma-vercel",
"dependencies": {
"@prisma/client": "4.7.1",
"next": "13.0.6",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"vercel-build": "prisma generate && prisma migrate deploy && next build",
"prisma:generate": "prisma generate"
},
"devDependencies": {
"prisma": "4.7.1"
}
}
在这里,调用 vercel-build 命令将触发生成命令以使用新添加的模型更新 PrismaClient。如果您不使用 Prisma Migrate,则可以删除 migrate 部署命令。
这也发生在我身上。我的 src 文件夹中有 prisma 文件夹。它应该位于根文件夹中。如果没有任何其他问题,应该可以工作。