✅
Bunでprismaが使えない時のエラー対処
事象
- 以下のpackage.jsonで、
bun install
を実行して、prismaをインストールしたら、
エラーが出た。 - 以下のpackage.jsonで、
npm install
を実行して、prismaをインストールしたら、
正常に起動した。 -
Bun公式のprismaやり方ページでは、
bun add prisma
で行っている
backend $ bun run dev
$ bun src/index.ts
[0.05ms] ".env"
error: Cannot find module ".prisma/client/index" from "/Users/src/node-api-server/backend/node_modules/@prisma/client/index.js"
error: script "dev" exited with code 1 (SIGHUP)
backend $
package.json
{
"name": "backend",
"module": "index.ts",
"type": "module",
"devDependencies": {
"@types/jest": "^29.5.5",
"@typescript-eslint/eslint-plugin": "^6.7.0",
"bun-types": "latest",
"eslint": "^8.49.0",
"eslint-config-standard-with-typescript": "^39.0.0",
"eslint-plugin-import": "^2.28.1",
"eslint-plugin-n": "^16.1.0",
"eslint-plugin-promise": "^6.1.1",
"jest": "^29.7.0",
"typescript": "^5.2.2"
},
"scripts": {
"dev": "bun src/index.ts",
"build": "bun build --compile ./src/index.ts --outfile=app",
"test": "bun test --coverage",
"lint": "bun eslint src/**/*.ts",
"prettier": "bun prettier . --write",
"lint-fix": "npx eslint --fix src/**/*.ts && npx prettier . --write"
},
"peerDependencies": {
"typescript": "^5.0.0"
},
"dependencies": {
"@prisma/client": "latest",
"@types/express": "^4.17.17",
"@types/jest-when": "^3.5.3",
"body-parser": "^1.20.2",
"express": "^4.18.2",
"jest-mock-extended": "^3.0.5",
"jest-when": "^3.6.0",
"prettier": "^3.0.3",
"prisma": "^5.3.1",
"prisma-mock": "^0.9.0"
},
"jest": {
"transform": {
"^.+\\.(t|j)sx?$": "@swc/jest"
},
"coverageReporters": [
[
"text",
{
"file": "report.json"
}
]
]
}
}
発生状況
- OS :
ProductName: macOS
ProductVersion: 14.0
BuildVersion: 23A344
- NodeJs : v18.16.1
- Bun : 1.0.1
- npm : 9.5.1
対象読者
- Bunでprisma使い始めて方
- Bunのエラーに関する情報が少なくて困っている方
- 未来の自分
解決法
BunとPrismaの両方のGitHubのIssueにある通り
まだ、サポートされていませんでした。
おとなしくPrisma使いたいならNodeを使いましょう。
まとめ
- Prismaは、Bunをまだサポートしていませんでした
- 2023/9/29現在、本記事と同様の事象に関するIssueがOpenになっており、議論されている
- 基本は、Nodeを使いつつ、CI/CDとかのテストとか恩恵を受けられるところで使っていくのがいいのかなと思いました
Discussion
Nodeがインストールされていればbunでprismaを実行することができます。
私はdockerで運用していますが、
nodeのイメージにbunをbuild時にインストールしています。
そうすることで、bun prisma initをはじめとしたコマンドが使用できます。