Moj*_*ari 5 javascript node.js electron nuxt.js prisma
我正在构建一个 Nuxt-electron-prisma 应用程序,但我有点卡在这里。当我按照指导正常使用 prisma 时,开发时一切正常,但在构建时出现此错误:
\nA javascript error occurred in the main process\nUncaught exception:\nError: can not find module : \'.prisma/client\'\nRun Code Online (Sandbox Code Playgroud)\n我尝试将 prisma 提供程序输出更改为../resources/prisma/client
A javascript error occurred in the main process\nUncaught exception:\nError: can not find module : \'.prisma/client\'\nRun Code Online (Sandbox Code Playgroud)\n在 Electron 的 main.js 中
\ngenerator client {\n provider = "prisma-client-js"\n output = "../resources/prisma/client"\n}\nRun Code Online (Sandbox Code Playgroud)\n但我Cannot find module \'_http_common\' at webpackMissingModules在开发和构建中都遇到错误!其他人认为这是在客户端使用 prisma 时引起的,但我只在background.js(main.js我的样板)上使用它
我正在为 Nuxt- Electron 使用Nuxtron样板,它使用 yml 文件作为电子构建器配置文件,并且在其中我还在文件属性中添加了 prisma :
\nconst { PrismaClient } = require(\'../resources/prisma/client\');\nconst prisma = new PrismaClient()\nRun Code Online (Sandbox Code Playgroud)\n仍然出现错误
\n在我的win-unpacked/resources我只有这个:win-unpacked\\resources\\app.asar.unpacked\\node_modules\\@prisma\\engines
当然还有我的 package.json
\nappId: 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\nRun Code Online (Sandbox Code Playgroud)\n
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 存档也可以使用。