webpack - 在 Electron 打包所有内容后,Prisma 客户端找不到查询引擎

标签 webpack electron electron-builder prisma

我正在使用 Electron 和 Prisma(以及我们不必担心的其他项目)制作一个项目。几个小时以来,我一直试图解决这个错误:我无法让 Prisma 找到查询引擎的可执行文件,我已经尝试了很多我在互联网上找到的东西,但仍然没有。
我试图设置 Prisma 将在哪里找到查询引擎,我找到的这个 repo the "solution" ,但它没有用(至少对我来说不是):
这是我的 Prisma 架构:

datasource db {
    provider = "sqlite"
    url      = "file:./data.db"
}

generator client {
    provider = "prisma-client-js"
    binaryTargets = ["native"]
    output   = "../electron/database/generated/client"
}
我正在使用 webpack 来编译 Electron 和 React,所以我将模式生成设置为 Electron 文件夹,然后 webpack 将编译到“dist”文件夹。我用了 copy-webpack-plugin复制 schema.prisma 和 query-engine-windows.exe(这是我的操作系统)。毕竟我收到这个错误:
r [PrismaClientKnownRequestError]: spawn C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar.unpacked\dist\query-engine-windows.exe ENOENT
    at C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar\dist\main.js:69:77852
    at c (C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar\dist\main.js:1:54711)
    at Generator._invoke (C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar\dist\main.js:1:54464)
    at Generator.throw (C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar\dist\main.js:1:55070)
    at asyncGeneratorStep (C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar\dist\main.js:1:195068)
    at s (C:\Users\Tiago Oliveira\programming\web-dev\electron-prisma-react-ts-passwordkeeper\packages\win-unpacked\resources\app.asar\dist\main.js:1:195340)
    at processTicksAndRejections (internal/process/task_queues.js:93:5) {
  code: 'ENOENT',
  clientVersion: '2.24.1',
  meta: undefined
}
事件使用此设置获取应用程序路径并将路径设置为 qe(查询引擎)所在的位置,它说它不存在......?
import { app } from "electron"
import path from "path"
const qePath = path.join(
    app.getAppPath().replace("app.asar", "app.asar.unpacked"),
    "dist/query-engine-windows.exe"
)

const prisma = new PrismaClient(process.env.NODE_ENV === "production" ? {
    __internal: {
        engine: {
            binaryPath: qePath
        }
    }
} : {})
为了确保我没有疯,我沿着它所说的不存在的路径把它扔到控制台上,然后它就跑了!所以这里有些不对劲。
如果您对文件的外观有任何疑问,可以访问 this project repo 查看。 .
如果你想得到错误并尝试自己得到错误,只需克隆 repo 并执行 yarn 并运行“yarn package:exe”m,这将编译主文件夹,即 Electron,然后编译 src 文件夹,即React,然后它会为 Electron 捆绑它,然后立即执行它:yarn package:exe将 webpack-(all)>electron->execute。

最佳答案

我从来没有使用过 Prisma 或 Electron,但根据我的 webpack 经验,几乎没有什么事情听起来很不对劲:

  • webpack 擅长将 js 拉到一起并输出一些其他文件。强制它复制粘贴文件感觉有点像代码味道——webpack 不理解 exe 文件,所以很可能它不应该管理它们
  • “schema.prisma”似乎是 js 正在使用的东西 - 我很惊讶它没有从它需要的地方导入
  • exe文件是特定于操作系统的 - 我希望 js 构建是独立于平台的,而且最重要的是需要构建代码并用执行文件 package 它

  • 总的来说,我希望有相当不同的架构;但我不知道 Electron 社区通常会做什么。

    关于webpack - 在 Electron 打包所有内容后,Prisma 客户端找不到查询引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67962157/

    相关文章:

    windows-7 - 在Windows 7操作系统上运行时, Electron 应用程序显示黑屏

    macos - 如何使用适用于 macOS 的 Visual Studio 代码为外部 Mac 应用商店签署和公证 Electron 应用程序构建?

    electron - 为什么我的 Electron 应用程序在打包后无法启动?

    javascript - Redux Web 扩展 - 未捕获的类型错误 : Invalid attempt to spread non-iterable instance

    ruby-on-rails - 如何在 Rails 3.2 中使用 React 生态系统?

    javascript - 简单的 NPM 包捆绑/销售?

    javascript - React - 无法读取未定义的属性,尽管我在构造函数中绑定(bind)了该函数

    javascript - 无法单击 Nightmare.js 中的按钮,但可以在控制台中使用

    网页包。 scss。 @extend后有重复的代码

    angular - Nx工作区+本地存储