docs/archives/007-electron-api-refactor-rollback.md
12f6f49 - "feat(ui): 添加 Electron API Hook并重构更新管理"useUpdater.ts:224 [useUpdater] Error checking all versions: Error: Failed to check versions
at g (useUpdater.ts:128:15)
[DESKTOP] [2025-07-14 00:20:57] [info] Unified version check completed: { stable: '1.2.5', prerelease: '1.2.5' }
{
currentVersion: '1.2.0',
stable: { hasUpdate: true, remoteVersion: '1.2.5', ... },
prerelease: { hasUpdate: true, remoteVersion: '1.2.5', ... }
}
// 但是 response.success 是 undefined
// 简单直接
const results = await window.electronAPI!.updater.checkAllVersions()
// 过度抽象
const { updater } = useElectronAPI()
const response = await updater.checkAllVersions()
if (!response.success) { // response.success 是 undefined
throw new Error(response.error || 'Failed to check versions')
}
const results = response.data
getElectronAPI() 而不是 useElectronAPI()window.electronAPI,绕过了包装器result.data(直接数据){success, data, error} 格式response.success 为 undefinedrm packages/ui/src/composables/useElectronAPI.ts
useElectronAPI 导入electronUpdater 改为 window.electronAPI.updaterelectronShell 改为 window.electronAPI.shellelectronOn/electronOff 改为 window.electronAPI.on/off// packages/ui/src/types/electron.d.ts
interface UpdaterAPI {
checkAllVersions(): Promise<{
currentVersion: string
stable?: { remoteVersion?: string, hasUpdate?: boolean, ... }
prerelease?: { remoteVersion?: string, hasUpdate?: boolean, ... }
}>
installUpdate(): Promise<void>
ignoreVersion(version: string, versionType?: 'stable' | 'prerelease'): Promise<void>
}
interface ShellAPI {
openExternal(url: string): Promise<void>
}
checkAllVersions: async () => {
const result = await withTimeout(
ipcRenderer.invoke(IPC_EVENTS.UPDATE_CHECK_ALL_VERSIONS),
60000
);
if (!result.success) {
throw new Error(result.error);
}
return result.data; // 直接返回数据
}
electron.d.ts 解决 IDE 警告// ✅ 正确:完善类型定义
declare global {
interface Window {
electronAPI: {
updater: UpdaterAPI
shell: ShellAPI
on: (event: string, callback: Function) => void
off: (event: string, callback: Function) => void
}
}
}
// ✅ 正确:直接使用
const result = await window.electronAPI.updater.checkAllVersions()
// ❌ 错误:不必要的包装
const { updater } = useElectronAPI()
const response = await updater.checkAllVersions()
const result = response.data
// ✅ 正确:直接调用
const result = await window.electronAPI.updater.checkAllVersions()
教训: 有时候最好的重构就是不重构。简单的问题用简单的方法解决。