如何在Electron中使用Prisma

8

我正在使用Prisma(sqlite数据库)与Electron + Angular应用程序

一切都很好,直到我尝试创建记录

我在控制台中多次重复收到此错误

这是我的schema.prisma文件的一部分:

datasource db {
    provider = "sqlite"
    url      = env("DATABASE_URL")
}

generator client {
    provider = "prisma-client-js"
    binaryTargets = ["native","darwin","debian-openssl-1.1.x","linux-musl"]
  }

我尝试在一个简单的TypeScript项目中使用相同的Prisma配置,它可以正常工作。

但是当我在Electron中尝试使用时,出现了错误。

据我所知,它无法找到查询引擎二进制文件,但我不知道该如何告诉Electron从哪里获取它们。


如有必要,可以添加任何其他代码。 - v0rt3x
你是在前端执行查询吗?目前Prisma仅支持Node,因此您需要在Electron的主进程中编写查询。 - Ryan
2个回答

7

你好

我也曾遇到与prisma相关的类似问题。

  1. 问题是自定义的prisma客户端与用于平台的下载二进制文件一起生成在 node_modules/.prisma 文件夹(默认)中。

  2. 当webpack打包代码时,.prisma 文件夹没有随生成的app.asar包一起包含在 node_modules 文件夹中,因此无法加载prisma客户端以及二进制文件。

解决方案

我根据 prisma文档 更改了生成的prisma客户端的输出路径。

generator client {
  provider = "prisma-client-js"
  output   = "../src/main/database/generated/client"
}

并将以下代码包含在我的database.js文件中(位于database文件夹内)

import { PrismaClient } from './generated/client';

由于下载的二进制文件也放置在output文件夹中,所以 Prisma 客户端能够轻易地找到它,没有任何问题。


2

当我使用 electron-builder 构建本地二进制文件时,遇到了同样的问题。 在我的情况下,我需要将 .env 文件添加到 package.json 的构建块中,并像 spc 提到的那样更改 output 路径。

// package.json
{
 ...
  "build": {
    ...
    "files": [
      ...
      ".env"
    ],
    ...
  }
}

// schema.prisma
generator client {
  provider = "prisma-client-js"
  output   = "../electron/client"
  binaryTargets = ["native"]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接