Electron打包为exe后无法找到Prisma模块的问题求助
解决方案:Electron + Vite + Prisma打包后找不到Prisma Client问题
问题根源
打包时Electron Forge默认不会包含Prisma的核心文件(.prisma目录下的引擎二进制文件、@prisma/client的生成代码),导致运行时触发模块找不到的错误。
具体修复步骤
1. 配置Electron Forge打包时包含Prisma文件
修改forge.config.js的packagerConfig,添加extraResources和extraFiles,确保Prisma的必要文件被复制到打包后的应用目录:
module.exports = { packagerConfig: { asar: false, // 新增以下配置 extraResources: [ { from: './node_modules/.prisma/client/', to: 'node_modules/.prisma/client/' }, { from: './node_modules/@prisma/client/', to: 'node_modules/@prisma/client/' } ], extraFiles: [ './prisma/schema.prisma' // 可选:若需要打包schema文件则添加 ] }, // 其余原有配置保持不变... };
2. 确保打包前重新生成Prisma Client
修改package.json的make命令,在打包前执行prisma generate,保证生成的Client代码适配生产环境:
{ "scripts": { "make": "prisma generate && electron-forge make", // 其余原有脚本保持不变... } }
3. 修正数据库路径(关键)
打包后应用的工作目录会变化,不能使用开发时的相对路径作为DATABASE_URL。在主进程中使用Electron的app.getPath('userData')动态获取用户数据目录,设置数据库路径:
// src/main.js 示例代码 const { app } = require('electron'); const path = require('path'); const { PrismaClient } = require('@prisma/client'); // 动态生成数据库路径 const dbPath = path.join(app.getPath('userData'), 'database.sqlite'); process.env.DATABASE_URL = `file:${dbPath}`; const prisma = new PrismaClient();
4. 验证配置并重新打包
执行以下命令清理旧构建文件并重新打包:
rm -rf out/ # 清理旧打包目录 npm run make
为什么之前的配置无效?
你找到的路径匹配片段需要放在Electron Forge的extraResources/extraFiles配置项中,而非package.json的build字段或其他无关位置。这些配置会明确告知Forge哪些文件需要被包含到最终的应用包内。
内容的提问来源于stack exchange,提问作者dennis_10-33
相关产品推荐
相关产品推荐

