Electron-Prisma Error: can not find module '.prisma/client'
Electron-Prisma Error: can not find module '.prisma/client'
我正在构建一个 Nuxt-electron-prisma 应用程序,但我有点卡在这里了。当我按照指导正常使用 prisma 时,开发时一切正常,但在构建时出现此错误:
A javascript error occurred in the main process
Uncaught exception:
Error: can not find module : '.prisma/client'
我尝试将 prisma 提供程序输出更改为 ../resources/prisma/client
generator client {
provider = "prisma-client-js"
output = "../resources/prisma/client"
}
和电子main.js中
const { PrismaClient } = require('../resources/prisma/client');
const prisma = new PrismaClient()
但我在开发和构建中都收到错误 Cannot find module '_http_common' at webpackMissingModules
!其他人认为这是在客户端使用 prisma 时引起的,但我只在 background.js
(我的样板文件的 main.js
)
上使用它
我正在使用 Nuxt-electron 的 Nuxtron 样板文件,它使用 yml 文件作为 electron-builder 配置文件,我还在其中添加了 prisma 到文件 属性:
appId: com.example.app
productName: nuxt-electron-prisma
copyright: Copyright © 2021
nsis:
oneClick: false
perMachine: true
allowToChangeInstallationDirectory: true
directories:
output: dist
buildResources: resources
files:
- "resources/prisma/database.db"
- "node_modules/.prisma/**"
- "node_modules/@prisma/client/**"
- from: .
filter:
- package.json
- app
publish: null
仍然出现错误
在我的 win-unpacked/resources
我只有这个:win-unpacked\resources\app.asar.unpacked\node_modules\@prisma\engines
当然还有我的 package.json
{
"private": true,
"name": "nuxt-electron-prisma",
"productName": "nuxt-electron-prisma",
"description": "",
"version": "1.0.0",
"author": "",
"main": "app/background.js",
"scripts": {
"dev": "nuxtron",
"build": "nuxtron build"
},
"dependencies": {
"electron-serve": "^1.0.0",
"electron-store": "^6.0.1",
"@prisma/client": "^3.0.2"
},
"devDependencies": {
"@mdi/font": "^6.1.95",
"@nuxtjs/axios": "^5.13.6",
"@nuxtjs/device": "^2.1.0",
"@nuxtjs/dotenv": "^1.4.1",
"@nuxtjs/vuetify": "1.12.1",
"core-js": "^3.15.1",
"electron": "^10.1.5",
"electron-builder": "^22.9.1",
"glob": "^7.1.7",
"noty": "^3.2.0-beta",
"nuxt": "^2.15.7",
"nuxtron": "^0.3.1",
"sass": "1.32.13",
"swiper": "^5.4.5",
"prisma": "^3.0.2",
"vue-awesome-swiper": "^4.1.1"
}
}
好的,我终于解决了!!
首先不需要改变客户端生成器的输出方向!
//schema.prisma
datasource db {
provider = "sqlite"
url = "file:../resources/database.db"
}
generator client {
provider = "prisma-client-js"
// output = "../resources/prisma/client" !! no need for this!
}
然后在 electron-builder 配置中添加 ./prisma
, @prisma
和数据库
// my config file was a .yml
extraResources:
- "resources/database.db"
- "node_modules/.prisma/**/*"
- "node_modules/@prisma/client/**/*"
// or in js
extraResources:[
"resources/database.db"
"node_modules/.prisma/**/*"
"node_modules/@prisma/client/**/*"
]
这解决了`错误:找不到模块:'。prisma/client'
但仅此一项不会读取内置 exe 文件中的数据库!
所以在 main.js 中导入 @prisma/client
应该更改数据库读取目录:
import { join } from 'path';
const isProd = process.env.NODE_ENV === 'production';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient({
datasources: {
db: {
url: `file:${isProd ? join(process.resourcesPath, 'resources/database.db') : join(__dirname, '../resources/database.db')}`,
},
},
})
通过这些配置,我可以从我的 sqlite 数据库中获取数据
provided by Mojtaba Barari 有效,但它会导致 @prisma
包出现在 resources/app/node_modules
和 resources/node_modules
中。
有更好的方法:
{
"build": {
"extraResources": [
{
"from": "node_modules/.prisma/client/",
"to": "app/node_modules/.prisma/client/"
}
],
}
}
在这种情况下,Prisma 客户端文件将直接复制到 resources/app/node_modules
,其中已存在其他 @prisma
包,因此与其他解决方案相比,您将节省约 10 MB。
编辑:
如果将应用程序打包到 asar 存档中,我之前的解决方案将不起作用。您需要改用 files
字段:
{
"build": {
"files": [
{
"from": "node_modules/.prisma/client/",
"to": "node_modules/.prisma/client/"
}
],
}
}
这是一个通用的解决方案,即使您不使用 asar 存档也可以使用。
我正在构建一个 Nuxt-electron-prisma 应用程序,但我有点卡在这里了。当我按照指导正常使用 prisma 时,开发时一切正常,但在构建时出现此错误:
A javascript error occurred in the main process
Uncaught exception:
Error: can not find module : '.prisma/client'
我尝试将 prisma 提供程序输出更改为 ../resources/prisma/client
generator client {
provider = "prisma-client-js"
output = "../resources/prisma/client"
}
和电子main.js中
const { PrismaClient } = require('../resources/prisma/client');
const prisma = new PrismaClient()
但我在开发和构建中都收到错误 Cannot find module '_http_common' at webpackMissingModules
!其他人认为这是在客户端使用 prisma 时引起的,但我只在 background.js
(我的样板文件的 main.js
)
我正在使用 Nuxt-electron 的 Nuxtron 样板文件,它使用 yml 文件作为 electron-builder 配置文件,我还在其中添加了 prisma 到文件 属性:
appId: com.example.app
productName: nuxt-electron-prisma
copyright: Copyright © 2021
nsis:
oneClick: false
perMachine: true
allowToChangeInstallationDirectory: true
directories:
output: dist
buildResources: resources
files:
- "resources/prisma/database.db"
- "node_modules/.prisma/**"
- "node_modules/@prisma/client/**"
- from: .
filter:
- package.json
- app
publish: null
仍然出现错误
在我的 win-unpacked/resources
我只有这个:win-unpacked\resources\app.asar.unpacked\node_modules\@prisma\engines
当然还有我的 package.json
{
"private": true,
"name": "nuxt-electron-prisma",
"productName": "nuxt-electron-prisma",
"description": "",
"version": "1.0.0",
"author": "",
"main": "app/background.js",
"scripts": {
"dev": "nuxtron",
"build": "nuxtron build"
},
"dependencies": {
"electron-serve": "^1.0.0",
"electron-store": "^6.0.1",
"@prisma/client": "^3.0.2"
},
"devDependencies": {
"@mdi/font": "^6.1.95",
"@nuxtjs/axios": "^5.13.6",
"@nuxtjs/device": "^2.1.0",
"@nuxtjs/dotenv": "^1.4.1",
"@nuxtjs/vuetify": "1.12.1",
"core-js": "^3.15.1",
"electron": "^10.1.5",
"electron-builder": "^22.9.1",
"glob": "^7.1.7",
"noty": "^3.2.0-beta",
"nuxt": "^2.15.7",
"nuxtron": "^0.3.1",
"sass": "1.32.13",
"swiper": "^5.4.5",
"prisma": "^3.0.2",
"vue-awesome-swiper": "^4.1.1"
}
}
好的,我终于解决了!! 首先不需要改变客户端生成器的输出方向!
//schema.prisma
datasource db {
provider = "sqlite"
url = "file:../resources/database.db"
}
generator client {
provider = "prisma-client-js"
// output = "../resources/prisma/client" !! no need for this!
}
然后在 electron-builder 配置中添加 ./prisma
, @prisma
和数据库
// my config file was a .yml
extraResources:
- "resources/database.db"
- "node_modules/.prisma/**/*"
- "node_modules/@prisma/client/**/*"
// or in js
extraResources:[
"resources/database.db"
"node_modules/.prisma/**/*"
"node_modules/@prisma/client/**/*"
]
这解决了`错误:找不到模块:'。prisma/client'
但仅此一项不会读取内置 exe 文件中的数据库!
所以在 main.js 中导入 @prisma/client
应该更改数据库读取目录:
import { join } from 'path';
const isProd = process.env.NODE_ENV === 'production';
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient({
datasources: {
db: {
url: `file:${isProd ? join(process.resourcesPath, 'resources/database.db') : join(__dirname, '../resources/database.db')}`,
},
},
})
通过这些配置,我可以从我的 sqlite 数据库中获取数据
@prisma
包出现在 resources/app/node_modules
和 resources/node_modules
中。
有更好的方法:
{
"build": {
"extraResources": [
{
"from": "node_modules/.prisma/client/",
"to": "app/node_modules/.prisma/client/"
}
],
}
}
在这种情况下,Prisma 客户端文件将直接复制到 resources/app/node_modules
,其中已存在其他 @prisma
包,因此与其他解决方案相比,您将节省约 10 MB。
编辑:
如果将应用程序打包到 asar 存档中,我之前的解决方案将不起作用。您需要改用 files
字段:
{
"build": {
"files": [
{
"from": "node_modules/.prisma/client/",
"to": "node_modules/.prisma/client/"
}
],
}
}
这是一个通用的解决方案,即使您不使用 asar 存档也可以使用。