Electron-Prisma 错误:找不到模块“.prisma/client”

Moj*_*ari 5 javascript node.js electron nuxt.js prisma

我正在构建一个 Nuxt-electron-prisma 应用程序,但我有点卡在这里。当我按照指导正常使用 prisma 时,开发时一切正常,但在构建时出现此错误:

\n
A javascript error occurred in the main process\nUncaught exception:\nError: can not find module : \'.prisma/client\'\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试将 prisma 提供程序输出更改为../resources/prisma/client

\n
A javascript error occurred in the main process\nUncaught exception:\nError: can not find module : \'.prisma/client\'\n
Run Code Online (Sandbox Code Playgroud)\n

在 Electron 的 main.js 中

\n
generator client {\n  provider = "prisma-client-js"\n  output   = "../resources/prisma/client"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但我Cannot find module \'_http_common\' at webpackMissingModules在开发和构建中都遇到错误!其他人认为这是在客户端使用 prisma 时引起的,但我只在background.js(main.js我的样板)上使用它

\n

我正在为 Nuxt- Electron 使用Nuxtron样板,它使用 yml 文件作为电子构建器配置文件,并且在其中我还在文件属性中添加了 prisma :

\n
const { PrismaClient } = require(\'../resources/prisma/client\');\nconst prisma = new PrismaClient()\n
Run Code Online (Sandbox Code Playgroud)\n

仍然出现错误

\n

在我的win-unpacked/resources我只有这个:win-unpacked\\resources\\app.asar.unpacked\\node_modules\\@prisma\\engines

\n

在此输入图像描述

\n

当然还有我的 package.json

\n
appId: com.example.app\nproductName: nuxt-electron-prisma\ncopyright: Copyright \xc2\xa9 2021\nnsis: \n  oneClick: false\n  perMachine: true\n  allowToChangeInstallationDirectory: true\n\ndirectories:\n  output: dist\n  buildResources: resources\nfiles:\n  - "resources/prisma/database.db"\n  - "node_modules/.prisma/**"\n  - "node_modules/@prisma/client/**"\n  - from: .\n    filter:\n      - package.json\n      - app\npublish: null\n
Run Code Online (Sandbox Code Playgroud)\n

liv*_*mas 2

Mojtaba Barari提供的解决方案有效,但它导致包同时出现在和中。@prismaresources/app/node_modulesresources/node_modules

有一个更好的方法来做到这一点:

{
  "build": {
    "extraResources": [
      {
        "from": "node_modules/.prisma/client/",
        "to": "app/node_modules/.prisma/client/"
      }
    ],
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Prisma 客户端文件将直接复制到resources/app/node_modules其他@prisma软件包已存在的位置,因此与其他解决方案相比,您将节省约 10 MB 的空间。

编辑:

如果应用程序打包到 asar 存档中,我之前的解决方案将不起作用。您需要使用files字段来代替:

{
  "build": {
    "files": [
      {
        "from": "node_modules/.prisma/client/",
        "to": "node_modules/.prisma/client/"
      }
    ],
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个通用的解决方案,即使您不使用 asar 存档也可以使用。