PlantAI 桌面端(Electron 瘦客户端)
把 ui/ 的 Vue 单页应用封装成 Electron 桌面 App。后端(Python/BFF/向量库)不打包进 App,桌面端只是一个指向后端的瘦客户端。
原理
- Electron 主进程内起一个只监听
127.0.0.1的本地 HTTP 服务(server.js):- 静态托管
renderer-dist(即ui/dist的副本); - 把
/api反代到可配置的后端地址。
- 静态托管
- 前端源码
ui/零改动、后端 CORS 零改动:相对路径/api与 SSE 流靠同源天然可用。 - 后端地址配置(
config.js)优先级:PLANTAI_BFF_URL环境变量 >userData/config.json> 默认http://127.0.0.1:8090。可在应用内菜单「设置 → 后端地址…」修改(保存后重载)。
环境要求
- Node.js ≥ 18、npm。
开发运行
cd desktop
npm install
npm run build:ui # 先构建前端(ui/)并复制产物到 renderer-dist/
npm start # 启动 Electron 窗口
打包
cd desktop
npm run dist:linux # AppImage + deb
npm run dist:win # NSIS 安装包 + portable
npm run dist:mac # dmg + zip(必须在 macOS 上构建)
跨平台注意事项
- macOS 安装包必须在 macOS 机器上构建(或 macOS CI);Linux 无法产出 dmg。
- Windows 可从 Linux 交叉打包,个别步骤(图标/rcedit)可能依赖 wine;更稳的方式是用 CI 三平台矩阵产出。
- 应用图标:
build/icon.png(512×512,PNG)。electron-builder 会据此自动派生.ico/.icns;未提供时使用默认 Electron 图标。 - 后端可达性:桌面端要能访问配置的后端地址(公网 HTTPS / VPN / SSH 隧道均可),属网络环境问题,非代码范围。