🐷
VercelにNextjsアプリをデプロイしようとしたらPrismaClientInitializationErrorが発生した
はじめに
個人開発のNextjsアプリケーションをVercelにデプロイしようとした際に発生したエラーの内容と解決方法を備忘録として残しておきます。
発生したエラー
今回はPrismaClientInitializationError
というエラーが発生しました。
PrismaClientInitializationError: Prisma has detected that this project was built on Vercel, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the `prisma generate` command during the build process.
日本語訳
PrismaClientInitializationError: Prismaは、このプロジェクトが依存関係をキャッシュするVercelでビルドされたことを検出しました。Prismaの自動生成がトリガーされないため、Prismaクライアントが古くなります。これを修正するには、ビルドプロセス中に prisma generate コマンドを実行するようにしてください。
なぜ発生したか
以下のVercelのドキュメントが参考になりました。
Prisma ORMは依存関係がインストールされた際にPrisma Clientを生成するためインストールhookを使用していますが、
Vercelではビルドの高速化のために、ビルド時にモジュールをキャッシュしており最初のデプロイ以降はインストールhookが実行されないことが原因でした。
解決方法
Vercelのビルドログを見てみるとnpm scriptのbuild
が実行されていることがわかったため、next buildをする前にprisma generate
を実行することでエラーが解消されました。
{
"script": {
"build": "prisma generate && next build"
}
}
Discussion