生产构建失败:类型错误:“PrismaClient”类型上不存在属性“公司”......而本地构建通过

问题描述 投票:0回答:2

我正在使用 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
}

在添加这个新模型之前生产版本已通过

typescript next.js prisma
2个回答
4
投票

您需要确保

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 部署命令。


0
投票

这也发生在我身上。我的 src 文件夹中有 prisma 文件夹。它应该位于根文件夹中。如果没有任何其他问题,应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.