Craft Agents自动更新系统解析:auto-update.ts工作原理

发布时间:2026/9/15 12:38:03
Craft Agents自动更新系统解析:auto-update.ts工作原理 Craft Agents自动更新系统解析auto-update.ts工作原理【免费下载链接】craft-agents-oss项目地址: https://gitcode.com/GitHub_Trending/cr/craft-agents-ossCraft Agents 是一款面向 AI 智能体协作的开源桌面应用它的自动更新系统让用户无需手动下载安装包即可保持版本最新。本文带你拆解核心文件 auto-update.ts 的工作原理它基于 electron-updater 实现启动即检查、后台静默下载、下载完成一键重启安装并针对 macOS / Windows / Linux 三大平台分别采用 zip 包、NSIS 安装包、AppImage 三种安装策略真正做到无感更新。 更新组件全景谁负责什么整个自动更新机制由三层协作完成各文件职责清晰层级文件职责主进程核心auto-update.ts检查更新、管理下载状态、执行安装重启渲染进程 UIuseUpdateChecker.ts展示下载进度、弹出更新就绪提示、响应用户操作打包配置electron-builder.yml声明更新源地址generic provider与各平台产物格式状态契约dto.ts定义主进程与 UI 之间共享的UpdateInfo数据结构更新清单托管在agents.craft.do/electron/latest这个地址上由 electron-builder.yml 中的publish段第 76-79 行声明。electron-updater 会定期拉取该地址的 YAML 清单比对本地版本号判断是否有新版本。 核心流程从启动检查到重启安装1️⃣ 启动即检查自动下载应用启动时主进程入口 index.ts 会调用checkForUpdatesOnLaunch()。它内部委托给 electron-updater 的autoUpdater.checkForUpdates()且默认开启autoDownload true——发现新版本后自动开始后台下载用户无需点击任何按钮见 auto-update.ts 第 125-139 行。这里有个贴心细节checkForUpdates()支持autoDownload参数手动检查更新时可临时关闭自动下载避免在计流量连接上浪费流量检查结束后还会恢复原设置。2️⃣ 一套状态机贯穿始终UpdateInfo所有更新状态都收敛为一个UpdateInfo对象定义于 dto.tsdownloadStateidle → downloading → ready → installing出错则进入errordownloadProgress0-100 的实时进度currentVersion/latestVersion当前与最新版本号electron-updater 每触发一个事件update-available、download-progress、update-downloaded、errorauto-update.ts 中的事件处理器就同步更新这个对象并广播给所有渲染窗口——UI 永远是最新真相的镜像。3️⃣ 断点续传的聪明做法缓存目录检测如果上次启动时更新已下载到一半甚至已完成再次启动时不必重复下载。系统通过checkForExistingDownload()扫描各平台的更新缓存目录Windows 为%LOCALAPPDATA%\{app}-updater\pendingmacOS 为~/Library/Caches/...优先读取 electron-updater 写入的update-info.json做二次确认直接标记为ready状态见 auto-update.ts 第 274-321 行。4️⃣ 一键安装多窗口状态不丢失用户点击重启并安装后installUpdate()做三件事auto-update.ts 第 384-429 行调用quitAndInstall()让 electron-updater 按平台策略完成替换并自动拉起新版本置位__isUpdating标志防止主进程误判为普通退出而强制杀掉更新流程执行beforeUpdateQuitHook——在窗口被销毁前快照多窗口布局避免重启后窗口状态被清空。️ 三大平台差异化安装策略不同操作系统使用不同的产物格式但都由 electron-updater 原生接管无需外部脚本平台产物格式安装方式macOSzip解包后原子性替换应用包WindowsNSIS 安装包.exe退出时静默安装oneClick 模式LinuxAppImage直接替换当前文件各平台的打包规则、图标与命名规则统一由 electron-builder.yml 定义例如 Windows 采用 per-user 安装到%LOCALAPPDATA%\Programs\避免权限问题第 190-195 行。 用户友好设计进度可见 一键免打扰渲染进程的 useUpdateChecker.ts Hook 是用户与更新系统的界面进度条订阅onUpdateDownloadProgress事件实时刷新百分比更新就绪 Toast下载完成后弹出提示带重启按钮10 秒后自动收起不再提醒用户关闭提示后版本号会被持久化到用户配置dismissedUpdateVersion见 storage.ts重启应用也不会再次打扰一旦用户主动点击安装该记录立即清除。此外菜单栏会动态追加安装更新…选项menu.ts 第 60-69 行即使弹窗被错过入口也始终存在。 关键源码索引主进程更新核心apps/electron/src/main/auto-update.ts启动时触发与事件总线接入apps/electron/src/main/index.tsIPC 通道定义getUpdateInfo/installUpdateapps/electron/src/transport/channel-map.tsUI 状态 Hookapps/electron/src/renderer/hooks/useUpdateChecker.ts更新源与打包产物配置apps/electron/electron-builder.yml版本号唯一来源读取 package.jsonpackages/shared/src/version/index.ts✅ 小结Craft Agents 的自动更新系统是一个教科书级的 Electron 更新方案electron-updater 负责搬运auto-update.ts 负责编排。状态机 事件广播让 UI 始终同步缓存检测避免重复下载平台差异化策略保证三端一致体验而不再提醒与多窗口状态快照等细节则体现了对真实使用场景的细致打磨。理解了这套机制你也可以快速为自己的 Electron 桌面应用搭建可靠的自动更新能力。【免费下载链接】craft-agents-oss项目地址: https://gitcode.com/GitHub_Trending/cr/craft-agents-oss创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考