【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でのクロスプラットフォームに対応しているためお勧めだとのことでした。