Electron 混合存储架构
Electron Hybrid Storage Architecture
Electron 文件系统与浏览器 localStorage 的双模存储,通过 preload bridge 暴露 API
子问题
1.Electron preload安全暴露API
2.文件系统与localStorage双模适配
3.图片本地持久化与base64转换
4.存储路径配置与数据迁移
5.多项目切换时 Zustand rehydrate 竞态导致数据覆盖
6.三存储源(localStorage/IndexedDB/fs)数据冲突与迁移方向判断
7.共享资源与项目专属资源的拆分存储与合并加载
8.自定义协议注册实现本地媒体文件的安全加载
各项目的解法1 solutions
Signals
横向对比
| 维度 | moyin-creator |
|---|---|
| 桥接机制 | contextBridge 四命名空间(fileStorage/imageStorage/storageManager/electronAPI) |
| 存储后端 | Node.js fs 文件系统,key 映射为 JSON 文件路径 |
| 环境检测 | 运行时 isElectron() 检测 window.fileStorage 存在性 |
| 降级策略 | Electron 不可用时透明降级到 localStorage |
| 数据迁移 | 三源比较(localStorage/IndexedDB/fs)+ hasRichData 语义判断迁移方向 |
| 项目隔离 | _p/{projectId}/ 目录级物理隔离 + _shared/ 跨项目共享 |
| 切换协议 | 4 步安全切换:更新路由 → rehydrate → 同步内部 ID → ensureProject |
| 导入回滚 | tmpdir 临时备份 + try/catch 自动回滚 |
最佳实践
1.contextBridge安全暴露最小API集
2.运行时检测isElectron自动切换存储后端
3.从持久化数据中提取 projectId 而非依赖全局状态防止竞态写入
4.迁移前等待 project-store rehydration 完成再路由读写
5.导入数据前创建 tmpdir 备份支持失败自动回滚
6.hasRichData 语义判断数据丰富度而非简单比较大小