Nuxt-electron-prisma打包后提示找不到.prisma/client模块如何解决
解决方案
第一步:还原Prisma默认配置
先撤销之前对Prisma Client输出路径的自定义修改,还原schema.prisma的generator配置为默认值:
generator client { provider = "prisma-client-js" }
同时还原Electron主进程background.js里的引入语句:
const { PrismaClient } = require('@prisma/client') const prisma = new PrismaClient()
第二步:配置主进程Webpack跳过打包Prisma依赖
你遇到的Cannot find module '_http_common'错误,核心原因是Nuxtron默认会用Webpack打包主进程代码,而Prisma Client属于Node原生依赖,不允许被Webpack打包处理,需要标记为外部依赖跳过打包:
找到项目根目录下Nuxtron的主进程Webpack配置文件(默认路径为build/webpack.main.config.js,如果不存在可手动新建),添加如下externals配置:
module.exports = { // 其他原有配置保持不变 externals: ['@prisma/client', '.prisma/client'] }
第三步:修正electron-builder打包配置
修改你的electron-builder.yml配置,新增asarUnpack字段确保Prisma的二进制引擎文件能被正确解压,同时修正files字段的包含规则:
appId: com.example.app productName: nuxt-electron-prisma copyright: Copyright © 2021 nsis: oneClick: false perMachine: true allowToChangeInstallationDirectory: true directories: output: dist buildResources: resources # 新增:指定不需要打包进asar的文件,Prisma二进制引擎必须解压才能正常运行 asarUnpack: - "node_modules/@prisma/engines/**" - "node_modules/.prisma/**" files: - "resources/**" - "node_modules/@prisma/client/**" - "node_modules/@prisma/engines/**" - "node_modules/.prisma/**" - from: . filter: - package.json - app publish: null
第四步:调整打包执行流程
每次执行打包前需要先运行prisma generate生成最新的Prisma Client代码,修改package.json的build脚本:
"scripts": { "dev": "nuxtron", "build": "prisma generate && nuxtron build" }
额外注意事项
- 如果使用Sqlite数据库,运行时需要通过
app.getPath('userData')等Electron API动态获取数据库路径,不要写死相对路径,避免打包后找不到数据库文件 - 确认
@prisma/client放在dependencies依赖项下,不要移动到devDependencies,你当前的配置是正确的无需修改
内容的提问来源于stack exchange,提问作者Mojtaba Barari
相关产品推荐
相关产品推荐

