跳到主要内容

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