pnpm Monorepo下多個子應用使用Prisma時,如何避免migrate命令導致@prisma/client全局變更?

pnpm Monorepo下多個子應用使用Prisma時,如何避免migrate命令導致@prisma/client全局變更?

pnpm Monorepo 中使用 Prisma:隔離子應用的 @prisma/client

在使用 pnpm 管理的 Monorepo 項目中,多個子應用共享 Prisma 時,migrate 或 generate 命令可能導致 @prisma/client 被提升到根目錄,從而影響其他子應用。本文探討如何避免這種全局變更,確保每個子應用擁有獨立的 @prisma/client 版本。

問題根源在于 pnpm 的依賴提升機制。 嘗試使用 .npmrc 中的 hoist-pattern (例如 hoist-pattern[]=!@prisma/client 和 hoist-pattern[]=!prisma) 無效,因為 pnpm 的提升策略與 yarn 的 nohoist 不同。

解決方法

推薦方案:獨立的 Prisma Schema 和 Client

最佳實踐是每個子應用擁有獨立的 prisma/schema.prisma 文件,并使用 prisma generate 在各自目錄下生成 @prisma/client。 這確保了每個子應用擁有獨立的 @prisma/client 版本,避免沖突和不兼容性。 需要仔細管理每個子應用的 Prisma 配置,防止相互干擾。

其他方法 (較復雜,需深入理解 pnpm):

  • 精細化依賴管理: 深入研究 pnpm 的依賴解析機制,通過精確的 package.json 配置來控制依賴安裝位置,最大限度地避免 @prisma/client 被提升到不必要的層級。 這需要對 pnpm 的內部工作原理有深入的了解。

通過以上方法,特別是推薦的獨立 Schema 和 Client 方法,可以有效防止 migrate 或 generate 命令導致 @prisma/client 在 pnpm Monorepo 中全局變更,從而確保子應用的獨立性和穩定性。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享