You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:10:54