【Electron】Cannot find module ‘.prisma/client/default’

こんにちは、フリーランスエンジニアの太田雅昭です。

Electron

Electronは、JavaScriptでデスクトップアプリを作れるツールです。

Prismaでエラーになる

devモードなら問題なかったのですが、buildすると以下のエラーになりました。

Cannot find module '.prisma/client/default'

対策

成果物にprismaを含める

以下のように、package.jsonに追記します。npmの場合です。

"build": {
  "extraResources": [
    "prisma/**/*",
    "node_modules/.prisma/**/*",
    "node_modules/@prisma/client/**/*"
  ]
}

パッケージマネージャーに気をつける

これは単にケースバイケースです。node_modules内の構成が変わるのですが、ネットで紹介されていた解決策との整合性がとれず、四苦八苦しました。パッケージマネージャーには気をつけましょう。

prismaをやめる

2025/01/05追記: 頑張ってPrismaでクロスプラットフォームをやってみました。下記で公開しています。

そもそも、prismaはクロスプラットフォームに弱いようです。バイナリを含むためだそうです。成果物に無理やりPrismaを含めても、対応バイナリがなければ意味がありません。

ただprismaのバイナリは、prisma.schemaでbinaryTargetsを指定すれば、意図したプラットフォームのものを作成できるようです。windows(たぶんintel), mac intel, mac armなどがあります。ただ、おそらくwindows armがありません。mac arm上で動作するvmware fusionはwindows armなので、これは困りものです。。。

ChatGPTによれば、better-sqlite3なら、Electronでのクロスプラットフォームに対応しているためお勧めだとのことでした。