pnpm v10環境でPrisma Clientが見つからない場合の対処法 (Error: Cannot find module '.prisma/client/default')
pnpmとprismaを使用したアプリケーション開発において、表題のようなエラー(Error: Cannot find module '.prisma/client/default’)に遭遇しました。本ブログではその対処方法を紹介したいと思います。
困っていたこと
pnpmとPrismaを採用したNestJSアプリケーションを開発し、ECS(Amazon Elastic Container Service)上での動作を目指していました。その過程で、アプリケーション起動時に以下のエラーメッセージに直面しました。
Error: Cannot find module ‘.prisma/client/default’
筆者の環境
- NestJS v10.3.10
- pnpm v10.10.0
- prisma v5.16.1
原因
この問題の主な原因は、pnpm v10から依存関係(dependencies)のlifecycle script(postinstallなど)がデフォルトで実行されなくなったことです。
pnpm.onlyBuiltDependencies
Only packages listed in this array will be able to run install scripts. IfonlyBuiltDependenciesFileandneverBuiltDependenciesare not set, this configuration option will default to blocking all install scripts.pnpm
解決策
@prisma/clientのlifecycle scriptを許可します。具体的には、packages.json内のpnpmフィールドに"onlyBuiltDependencies”を宣言します。
{
"name": "~~~~~~~~~"
~~~省略〜〜〜
},
"pnpm": {
"onlyBuiltDependencies": ["@prisma/client"]
}
}
確認のため、上記の設定でpnpm installを実行した際に、許可したlifecycle scriptが実行されるか検証します。
// onlyBuiltDependencies設定無し
[build 8/17] RUN pnpm install --frozen-lockfile --filter server
~~~省略~~~
#12 16.00 Progress: resolved 819, reused 0, downloaded 735, added 735
#12 17.00 Progress: resolved 819, reused 0, downloaded 816, added 816
#12 17.88 Progress: resolved 819, reused 0, downloaded 819, added 819, done
#12 18.21 Done in 14.4s using pnpm v10.10.0
#12 DONE 18.3s
//onlyBuiltDependencies設定有り
#12 [build 8/17] RUN pnpm install --frozen-lockfile --filter server
~~~省略~~~
#12 15.45 Progress: resolved 819, reused 0, downloaded 795, added 795
#12 15.97 Progress: resolved 819, reused 0, downloaded 819, added 819, done
#12 16.19 .../node_modules/@prisma/client postinstall$ node scripts/postinstall.js
#12 19.88 .../node_modules/@prisma/client postinstall: Done
#12 20.03 Done in 16.8s using pnpm v10.10.0
#12 DONE 20.1s
無事pnpm install後にpostinstallが実行されていることが確認できました!
結論
pnpm v10以降、dependenciesのlifecycle scriptがデフォルトで実行されなくなりました。Prismaのようにpostinstallスクリプトを使用するライブラリを使用する場合は、package.json内で"pnpm": { "onlyBuiltDependencies": ["<パッケージ名>"] }のように宣言し、必要なlifecycle scriptの実行を明示的に許可する必要があります。
参考
エラー解消にあたりこちらのissueを参考にしました。自身の環境に合わせて参考にしてください。
この記事が、同じ問題に直面している方々の助けになれば幸いです!







