我对 Prisma 代码生成在生产中的工作原理感到困惑。 Prisma CLI 应该安装在 devDependency 中,但
npx prisma generate
命令需要在生产中可用,因为生成的代码对于应用程序是必需的。我该如何解决这个问题?我尝试运行 npm i --production
和 npx prisma generate
,这导致了 npx 尝试自动安装 prisma 并获取 Prisma 1 而不是 Prisma 2 的预期问题,然后期望得到一个不存在的 prisma.yml 文件。
无需运行安装
prisma generate
时执行的 @prisma/client
命令。
编辑: https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/generate-prisma-client
这就是我在 package.json 文件中所做的(这是在 Versel 上部署 Next 应用程序)我刚刚将生成命令添加到构建脚本中:
"scripts": {
"dev": "next dev",
"build": "prisma generate && next build",
"start": "next start",
"lint": "next lint"
},
但不确定这是否是正确的方法..
Prisma 有多种在不同环境下安装的指南。 例如,这个讲的是在 vercel 上安装。
https://www.prisma.io/docs/guides/deployment/deployment-guides/deploying-to-vercel
安装后挂钩 package.json 使用 postinstall 挂钩脚本来运行 prisma generated。通常这会在构建步骤中进行。由于 Vercel 在安装依赖项后会缓存 node_modules,因此这些函数将无法访问生成的 Prisma 客户端。
在安装后生成 Prisma 客户端可确保在 node_modules/@prisma/client 中生成的 Prisma 客户端可供功能使用。
您不需要在生产中安装generate,该包有一个postinstall钩子:
@prisma/client 包定义了自己的安装后钩子,每当安装包时都会执行该钩子。该挂钩调用 prismagenerate 命令,该命令又将 Prisma 客户端代码生成到默认位置node_modules/.prisma/client。请注意,这需要 prisma CLI 可用,无论是作为本地依赖项还是作为全局安装。建议始终使用 npm install prisma --save-dev 将 prisma 包安装为开发依赖项,以避免版本冲突。