Electron 层
主进程和预加载脚本是 OpenTree 的核心。
主进程职责
// packages/main/src/main.ts
import { app, BrowserWindow, ipcMain } from 'electron'
import { registerIpcHandlers } from './ipc'
import { initDatabase } from './database'
app.whenReady().then(async () => {
// 1. 初始化数据库
await initDatabase()
// 2. 注册 IPC 处理器
registerIpcHandlers()
// 3. 创建窗口
createWorldTreeWindow()
createMetaverseWindow()
})
IPC 通道
所有 IPC 通道通过 contextBridge 暴露到渲染进程:
// packages/main/src/preload.ts
contextBridge.exposeInMainWorld('electronAPI', {
// 钥匙串
keychain: {
getAll: () => ipcRenderer.invoke('keychain-get-all'),
create: (data) => ipcRenderer.invoke('keychain-create', data),
update: (id, data) => ipcRenderer.invoke('keychain-update', id, data),
remove: (id) => ipcRenderer.invoke('keychain-delete', id),
},
// 收藏夹
getFavorites: () => ipcRenderer.invoke('get-favorites'),
addFavoriteManual: (data) => ipcRenderer.invoke('add-favorite-manual', data),
// ...
})
安全策略
contextIsolation: true- 上下文隔离nodeIntegration: false- 禁用 Node 集成preload脚本 - 通过 contextBridge 暴露安全 API