https://github.com/v-core9/electron_prisma_react
Electron_Prisma_React
https://github.com/v-core9/electron_prisma_react
Last synced: 2 months ago
JSON representation
Electron_Prisma_React
- Host: GitHub
- URL: https://github.com/v-core9/electron_prisma_react
- Owner: V-core9
- License: mit
- Created: 2023-05-10T19:53:48.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-11-02T21:06:43.000Z (7 months ago)
- Last Synced: 2025-01-17T15:16:40.761Z (4 months ago)
- Language: TypeScript
- Size: 4.26 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Prisma electron integration example
Integrate prisma in a secure and scalable manner.
Based on https://github.com/electron-react-boilerplate/electron-react-boilerplate. All initial work was done by Ayron Wohletz: https://dev.to/awohletz/an-electron-app-architecture-32hi
I highly recommend his articles.
## Install
Install project dependencies with `npm install`. Run `npm run prisma:init` for initial migration and prisma client generation. Then run `npm install` again to run the postinstall script (or you can run the postinstall script directly).
## Build
You need to understand the double package.json structure used by above boilerplate. Native modules go to `release/app/package.json`. So `prisma` and `@prisma/client` is added there. The prisma cli will also install this in the root `package.json`.
The output of the prisma client generated from `prisma/schema.prisma` needs to go to `../release/app/node_modules/@prisma/client` in order to get handled by the native binaries. Inside `prisma/schema.prisma` you can select the target binaries, depending on your compilation target: `binaryTargets = ["native", "windows"]`
Electron builder config takes care that these files are included in the build, outside the ASAR:
```json
"files": [
"dist",
"node_modules",
"package.json",
"prisma/**/*",
"resources/**/*",
"!**/node_modules/@prisma/engines/introspection-engine*",
"!**/node_modules/@prisma/engines/migration-engine*",
"!**/node_modules/@prisma/engines/prisma-fmt*",
"!**/node_modules/@prisma/engines/query_engine-*",
"!**/node_modules/@prisma/engines/libquery_engine*",
"!**/node_modules/prisma/query_engine*",
"!**/node_modules/prisma/libquery_engine*",
"!**/node_modules/prisma/**/*.mjs"
],
"extraResources": [
"./assets/**",
"prisma/**/*",
"node_modules/@prisma/engines/migration-engine*",
"node_modules/@prisma/engines/query*",
"node_modules/@prisma/engines/libquery*"
],
```## Electron integration / IPC
Prisma is exposed via ContextBridge to the renderer. In the main process we need to bootstrap the DB and set some IPC handlers to get our binary paths.
```js
// src/main/preload.js
const { PrismaClient } = require('@prisma/client');const dbPath = ipcRenderer.sendSync('config:get-prisma-db-path');
const qePath = ipcRenderer.sendSync('config:get-prisma-qe-path');const prisma = new PrismaClient({
datasources: {
db: {
url: `file:${dbPath}`,
},
},
// see https://github.com/prisma/prisma/discussions/5200
__internal: {
engine: {
// @ts-expect-error internal prop
binaryPath: qePath,
},
},
});
```## Prisma startup times
A postinstall script in `chore/post-install.js` is run to fix the prisma cold start time problem. Read more about it here: https://github.com/prisma/prisma/issues/8484
## DB Setup
If no db exists in the packaged app, the db from `prisma/dev.db` will be copied to the app's user data folder.
## TODO
Migrations/updates
## Resources
- https://dev.to/awohletz/an-electron-app-architecture-32hi
- https://github.com/TasinIshmam/prisma-electron-test
- https://github.com/prisma/prisma/discussions/5200
- https://github.com/prisma/prisma/issues/9613