跨平台支持

📎 引用文件

本文引用的文件 - desktop/electron/package.json - desktop/electron/README.md - desktop/electron/WINDOWS_PACKAGING.md - desktop/electron/src/main.ts - desktop/electron/src/backend-manager.ts - desktop/electron/src/backend-watchdog.ts - desktop/electron/src/secure-credentials.ts - desktop/electron/scripts/build-backend.ps1 - desktop/electron/scripts/build-signed-installer.mjs - desktop/electron/scripts/smoke-lifecycle.mjs - desktop/electron/scripts/smoke-credentials.cjs

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖与构建
  7. 性能与用户体验
  8. 故障排除指南
  9. 结论
  10. 附录:平台差异对照

简介

本文件聚焦 Vibe-Trading 桌面应用(Electron 宿主)在 Windows、macOS、Linux 上的跨平台实现与适配策略,覆盖平台检测、路径解析、系统 API 调用、安全凭据存储、后端进程生命周期管理、构建打包与发布流程,以及测试与冒烟用例。文档同时给出可操作的排障建议与性能优化要点,确保在不同操作系统上保持一致的文件权限、网络访问与系统集成行为。

项目结构

桌面层位于 desktop/electron,采用 Electron 主进程 + 渲染进程模式,通过子进程启动并守护 Python 后端服务。关键目录与职责: - src/main.ts:应用入口、窗口、菜单、本地化、IPC、安全头注入、单实例锁、关闭流程。 - src/backend-manager.ts:后端可执行文件解析、端口分配、健康检查、日志采集、优雅关闭与强制终止。 - src/backend-watchdog.ts:独立守护进程,负责监控父进程存活、启动/终止后端进程树、跨平台信号处理。 - src/secure-credentials.ts:基于 Electron safeStorage 的凭据加密存储与迁移(从 .env 与 qveris.json)。 - scripts/*:Windows 专用构建脚本、签名校验、冒烟测试等。 - package.json:Electron 与 electron-builder 配置、多语言资源、打包产物命名、NSIS 安装器选项。

graph TB A["main.ts<br/>主进程入口"] --> B["backend-manager.ts<br/>后端管理器"] B --> C["backend-watchdog.ts<br/>守护进程"] C --> D["Python 后端<br/>vibe-trading serve"] A --> E["secure-credentials.ts<br/>凭据存储"] A --> F["package.json<br/>打包与语言配置"] B --> G["scripts/*<br/>构建/签名/冒烟测试"]

图表来源 - desktop/electron/src/main.ts:1-285 - desktop/electron/src/backend-manager.ts:1-426 - desktop/electron/src/backend-watchdog.ts:1-167 - desktop/electron/src/secure-credentials.ts:1-240 - desktop/electron/package.json:1-86

章节来源 - desktop/electron/README.md:1-93 - desktop/electron/package.json:1-86

核心组件

章节来源 - desktop/electron/src/main.ts:1-285 - desktop/electron/src/backend-manager.ts:1-426 - desktop/electron/src/backend-watchdog.ts:1-167 - desktop/electron/src/secure-credentials.ts:1-240 - desktop/electron/scripts/build-backend.ps1:1-320 - desktop/electron/scripts/build-signed-installer.mjs:1-154

架构总览

下图展示从 Electron 主进程到 Python 后端的完整启动与健康检查流程,以及跨平台守护与关闭路径。

sequenceDiagram participant UI as "渲染进程" participant Main as "Electron 主进程" participant BM as "后端管理器" participant WD as "守护进程" participant BE as "Python 后端" UI->>Main : 启动应用/显示加载页 Main->>BM : start() BM->>BM : 解析后端可执行/选择端口 BM->>WD : spawn(守护进程, 环境变量) WD->>BE : spawn(后端, 参数) WD-->>BM : backend-started(pid) BM->>BE : GET /health (带鉴权头) BE-->>BM : 200 OK BM-->>Main : 返回 http : //127.0.0.1 : port/ Main->>UI : 加载后端 URL Note over Main,BE : 关闭时先 POST /system/shutdown,再终止进程树

图表来源 - desktop/electron/src/main.ts:148-192 - desktop/electron/src/backend-manager.ts:63-146 - desktop/electron/src/backend-manager.ts:148-187 - desktop/electron/src/backend-watchdog.ts:31-68

详细组件分析

主进程与平台检测

flowchart TD Start(["应用启动"]) --> Lock{"是否已存在实例?"} Lock --> |是| Focus["聚焦已有窗口"] Focus --> End(["结束"]) Lock --> |否| Ready["whenReady()"] Ready --> Locale["解析桌面本地化"] Locale --> Window["创建窗口与安全策略"] Window --> Boot["启动后端并等待健康"] Boot --> LoadUI["加载后端页面"] LoadUI --> End

图表来源 - desktop/electron/src/main.ts:33-63 - desktop/electron/src/main.ts:65-117 - desktop/electron/src/main.ts:278-280

章节来源 - desktop/electron/src/main.ts:1-285

后端管理器与路径解析

flowchart TD S(["start()"]) --> Resolve["解析后端可执行"] Resolve --> Port["分配空闲端口"] Port --> Spawn["spawn 守护进程"] Spawn --> Health["轮询 /health"] Health --> |成功| Return["返回后端 URL"] Health --> |失败| Error["抛出健康超时错误"] Return --> End(["完成"]) Error --> End

图表来源 - desktop/electron/src/backend-manager.ts:63-146 - desktop/electron/src/backend-manager.ts:270-371 - desktop/electron/src/backend-manager.ts:373-421

章节来源 - desktop/electron/src/backend-manager.ts:1-426

守护进程与进程树管理

sequenceDiagram participant WD as "守护进程" participant BE as "后端进程" WD->>BE : spawn(后端) loop 每250ms WD->>WD : 检测父进程存活 end WD-->>WD : 父进程死亡? alt 是 WD->>BE : 终止进程树 else 否 WD-->>WD : 继续监控 end

图表来源 - desktop/electron/src/backend-watchdog.ts:14-48 - desktop/electron/src/backend-watchdog.ts:88-117

章节来源 - desktop/electron/src/backend-watchdog.ts:1-167

凭据存储与安全边界

classDiagram class SecureCredentialStore { +initialize() Promise~void~ +status() CredentialStatus +set(name, value) Promise~void~ +environment() ProcessEnv -load() Promise~void~ -persist() Promise~void~ -migrateDotenv(path) Promise~void~ -migrateJsonField(path, field, key) Promise~void~ }

图表来源 - desktop/electron/src/secure-credentials.ts:69-124 - desktop/electron/src/secure-credentials.ts:140-220

章节来源 - desktop/electron/src/secure-credentials.ts:1-240

构建、打包与发布(Windows 为重点)

flowchart TD P["准备前端构建产物"] --> R["下载并校验 Python 嵌入包"] R --> I["安装锁定依赖与项目包"] I --> G["复制 GTK 原生 DLL 子集"] G --> F["复制前端静态资源"] F --> B["electron-builder 打包 NSIS"] B --> S{"是否签名构建?"} S --> |是| Sign["调用签名脚本并验证签名"] S --> |否| Done["输出未签名制品"] Sign --> Done

图表来源 - desktop/electron/scripts/build-backend.ps1:1-320 - desktop/electron/scripts/build-signed-installer.mjs:1-154 - desktop/electron/package.json:30-84

章节来源 - desktop/electron/WINDOWS_PACKAGING.md:1-153 - desktop/electron/scripts/build-backend.ps1:1-320 - desktop/electron/scripts/build-signed-installer.mjs:1-154 - desktop/electron/package.json:1-86

依赖与构建

章节来源 - desktop/electron/README.md:37-75 - desktop/electron/WINDOWS_PACKAGING.md:23-60 - desktop/electron/WINDOWS_PACKAGING.md:76-98 - desktop/electron/package.json:9-22

性能与用户体验

[本节为通用指导,无需特定文件引用]

故障排除指南

章节来源 - desktop/electron/src/backend-manager.ts:221-246 - desktop/electron/src/backend-manager.ts:148-187 - desktop/electron/src/secure-credentials.ts:85-96 - desktop/electron/scripts/build-backend.ps1:122-155 - desktop/electron/scripts/build-signed-installer.mjs:13-24

结论

Vibe-Trading 桌面层通过 Electron 主进程与独立的守护进程协同,实现了跨平台的后端生命周期管理、安全凭据存储与一致的启动/关闭体验。Windows 平台具备完整的嵌入式运行时构建、依赖锁定、原生 DLL 子集与签名发布能力;macOS/Linux 可复用相同的主进程逻辑与守护策略。通过严格的同源网络策略、白名单凭据与原子文件写入,系统在安全性与可靠性方面达到生产可用水平。建议在 CI 中持续运行冒烟测试与签名验证,确保各平台构建与发布质量稳定。

[本节为总结性内容,无需特定文件引用]

附录:平台差异对照

章节来源 - desktop/electron/src/backend-manager.ts:404-421 - desktop/electron/src/backend-watchdog.ts:103-117 - desktop/electron/src/main.ts:278-280 - desktop/electron/scripts/build-backend.ps1:192-237

测试策略与冒烟用例

章节来源 - desktop/electron/scripts/smoke-lifecycle.mjs:1-71 - desktop/electron/scripts/smoke-credentials.cjs:1-133 - desktop/electron/scripts/test-backend-resolution.mjs:1-132 - desktop/electron/package.json:10-18