ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Electron Forge Maker ZIP 完全指南:跨平台 Zip 分发与 macOS 自动更新清单生成

Electron Forge Maker ZIP 完全指南:跨平台 Zip 分发与 macOS 自动更新清单生成 开发工具桌面应用前端构建【免费下载链接】forge:electron: A complete tool for building and publishing Electron applications项目地址https://gitcode.com/gh_mirrors/fo/forge点击查看免费下载导读electron-forge/maker-zip是 Electron Forge 官方提供的 ZIP 归档 Maker它把已经过package步骤打包好的 Electron 应用进一步压缩为.zip分发文件。与 DMG、MSIX、Flatpak 等平台特定格式不同ZIP Maker 不依赖任何平台特定工具链在任何操作系统上都能运行因此特别适合作为通用分发格式、macOS 自动更新的载体或与 S3 等对象存储配合构建自动更新体系。阅读本文后你将掌握 ZIP Maker 的安装与配置方法、输出产物命名与目录结构规律、以及如何通过macUpdateManifestBaseUrl为 macOS 应用自动生成并维护RELEASES.json更新清单。ZIP Maker 是什么在 Electron Forge 的构建生命周期中package步骤产出的是「已打包但尚未分发」的应用目录而make步骤通过各类 Maker 将打包目录转换为平台特定的可分发格式。ZIP Maker 正是其中最简单、最通用的一种它使用cross-zip库将打包好的应用目录直接压缩为一个.zip归档既不需要安装额外的外部二进制也不限制宿主平台。核心实现位于 MakerZIP.ts其类定义如下export default class MakerZIP extends MakerBaseMakerZIPConfig { name zip; defaultPlatforms: ForgePlatform[] [darwin, mas, win32, linux]; isSupportedOnCurrentPlatform(): boolean { return true; } // ... }两个关键事实可以从源码得到确认defaultPlatforms覆盖 darwin、mas、win32、linux 四个平台这意味着只要在配置中挂载该 Maker 而不显式指定platforms它就会尝试为这四种平台产出 ZIP。isSupportedOnCurrentPlatform恒返回true这是「无平台依赖」的源码级证据。对比之下很多 Maker如 DMG、PKG会在这里检查当前操作系统是否为 macOS。ZIP Maker 之所以不受限制是因为cross-zip是跨平台的纯 Node.js 压缩实现不需要任何系统级工具。安装与所有官方 Maker 一样electron-forge/maker-zip作为开发依赖安装npm install --save-dev electron-forge/maker-zip从 package.json 可以看到该包依赖electron-forge/maker-base、electron-forge/core-utils、electron-forge/shared-types以及cross-zip^4.0.0并声明了node 22.13.0的运行时要求同时采用 ESM 格式type: module。基本配置在forge.config.js或package.json的config.forge字段的makers数组中挂载该 Maker 即可// forge.config.js module.exports { makers: [ { name: electron-forge/maker-zip } ] };也可以显式限定要生成的平台module.exports { makers: [ { name: electron-forge/maker-zip, platforms: [darwin, linux] } ] };所有配置项均为可选。若需要按目标架构差异化配置config既可以是一个对象也可以是一个接收arch参数并返回配置对象的函数官方文档与 Makers 总览 均展示了这一用法。ZIP Maker 的完整配置类型为MakerZIPConfig定义于 Config.ts。输出产物命名规则与目录结构理解产物路径有助于后续发布与 CI 脚本编写。在 MakerZIP.ts 的make方法中产物路径按以下规则确定const zipName ${path.basename(dir)}-${packageJSON.version}.zip; const zipPath path.resolve( makeDir, zip, targetPlatform, targetArch, zipName, );即最终输出到outDir/zip/platform/arch/应用目录名-版本号.zip应用目录名取自打包产物目录的basename。默认情况下Forge 的打包目录以package.json中的name命名因此my-app会生成my-app-1.0.0.zip这样的文件。版本号取自package.json的version字段源码中通过packageJSON.version读取。platform / arch 子目录产物按平台与架构分目录存放例如out/make/zip/darwin/arm64/my-app-1.0.0.zip。上述命名与目录规律被 MakerZip.spec.ts 的测试用例所固化例如针对 win32/linux 平台测试断言压缩源目录就是打包目录本身而针对 darwin/mas 平台则断言压缩源是dir/My Test App.app。macOS 与 MAS 的特殊处理一个值得注意的平台差异是在 darwin 与 mas 平台上ZIP 的压缩源并非打包目录本身而是其中的.app包const zipDir [darwin, mas].includes(targetPlatform) ? path.resolve(dir, ${appName}.app) : dir;这是因为 macOS 上的 Electron 打包产物是一个.app应用包包含 Info.plist、Contents 目录等ZIP 归档需要直接以.app为压缩根这样用户在 macOS 上解压后得到的是一个可直接双击运行的.app。而 win32/linux 平台的打包产物本身就是目录直接压缩该目录即可。macOS 静态文件自动更新RELEASES.json 清单ZIP Maker 在 macOS 上的一个重要能力是配合 Electron 的autoUpdater模块生成静态文件更新清单。当配置了macUpdateManifestBaseUrl后Maker 会额外生成一份架构特定的RELEASES.json。配置方式// forge.config.js module.exports { makers: [ { name: electron-forge/maker-zip, config: (arch) ({ macUpdateManifestBaseUrl: https://my-bucket.s3.amazonaws.com/my-app-updates/darwin/${arch} }) } ] };macUpdateManifestBaseUrl指向存放发布产物的对象存储桶目录该桶必须按「平台 → 架构」的文件夹层级组织例如darwin/arm64、darwin/x64。文档 zip.md 与 s3.mdx 均给出了一致的示例。清单生成逻辑源码级解析MakerZIP.ts 中与更新清单相关的逻辑可以拆解为三步读取现有清单Maker 在macUpdateManifestBaseUrl后拼接/RELEASES.json并执行fetch。若返回 200则解析出已有的SquirrelMacReleases结构currentReleasereleases数组若返回 404 等非 200 状态则从空清单开始。合并当前版本从releases中过滤掉与当前packageJSON.version相同的旧记录避免重复把currentRelease更新为当前版本并追加一条新记录其中updateTo.url指向${macUpdateManifestBaseUrl}/${zipName}。写回磁盘将更新后的清单写入makeDir/zip/platform/arch/RELEASES.json。两个前提条件值得注意均有源码与测试双重印证只有targetPlatform darwin时才会触发清单生成MAS 平台不会生成源码中注释明确说明 Only generate RELEASES.json for darwin builds (not MAS)只有配置了macUpdateManifestBaseUrl才会生成清单否则make只返回 zip 路径。测试用例 MakerZip.spec.ts 验证了三个关键场景win32/mas/linux 平台上不会发起网络请求darwin 平台上首次构建远端 404会生成合法清单远端已存在旧版本清单时新版本会追加到releases尾部并把currentRelease更新为新版本同时保留历史记录。生成的清单示例首次为my-appv1.2.1 构建 arm64 版本时生成的RELEASES.json形如{ currentRelease: 1.2.1, releases: [ { version: 1.2.1, updateTo: { version: 1.2.1, pub_date: 2013-09-18T12:29:5301:00, name: my-app v1.2.1, url: https://my-bucket.s3.amazonaws.com/my-app-updates/darwin/arm64/my-app-1.2.1-darwin-arm64.zip } } ] }将 zip 与RELEASES.json一起上传到对象存储后后续每次构建都会读取已存在的清单追加新版本并把currentRelease更新到最新版本从而让客户端平滑升级。url字段指向完整的 zip 下载地址name字段来自应用名与版本号pub_date为生成时刻的 ISO 时间戳。另外macUpdateReleaseNotes配置项可用于填充清单中updateTo.notes字段仅当配置了macUpdateManifestBaseUrl时生效便于在更新清单中附带本次发布的说明文字。端到端与 S3 Publisher 和 autoUpdater 配合完整的自动更新链路需要三部分配合详见 s3.mdxMaker 侧macOS 使用 ZIP Maker 并配置macUpdateManifestBaseUrl指向更新存储目录Windows 侧使用 Squirrel.Windows Maker 并配置remoteReleases生成增量更新。Publisher 侧使用electron-forge/publisher-s3将产物上传到同一个 bucket// forge.config.js module.exports { // ... makers: [ { name: electron-forge/maker-zip, config: (arch) ({ macUpdateManifestBaseUrl: https://my-bucket.s3.amazonaws.com/my-app-updates/darwin/${arch} }) }, { name: electron-forge/maker-squirrel, config: (arch) ({ remoteReleases: https://my-bucket.s3.amazonaws.com/my-app-updates/win32/${arch} }) } ], publishers: [ { name: electron-forge/publisher-s3, config: { bucket: my-bucket, public: true } } ] };应用侧在应用主进程中调用update-electron-app读取静态存储中的清单// main.js const { updateElectronApp, UpdateSourceType } require(update-electron-app); updateElectronApp({ updateSource: { type: UpdateSourceType.StaticStorage, baseUrl: https://my-bucket.s3.amazonaws.com/my-app-updates/${process.platform}/${process.arch} } });需要注意macUpdateManifestBaseUrl必须显式提供才能保证版本平滑过渡尤其是当更新文件经由 CDN 前置分发时。测试与质量保障该 Maker 的单元测试位于 MakerZip.spec.ts测试覆盖了win32/linux 平台压缩源为打包目录本身产物为fake-app-1.2.3.zip且只调用一次cross-zipdarwin/mas 平台压缩源切换为.app应用包fixture 目录fake-darwin-app/My Test App.app产物命名同样遵循目录名-版本.zip非 darwin 平台不会因macUpdateManifestBaseUrl发起网络请求darwin 平台清单生成的三种分支远端 200读取并追加、远端 404从空开始、已有旧版本保留旧记录并追加新记录、更新currentRelease。此外Maker 基类 Maker.ts 提供了ensureFile辅助方法删除已存在的目标文件并创建父目录make方法返回产物绝对路径数组供 Forge 核心的 Make 步骤与后续 Publisher 消费。使用建议与注意事项多平台交叉构建由于无平台依赖ZIP Maker 可以在 Linux 上为 win32/darwin 产出 ZIP配合--platform参数适合统一构建机的 CI 场景但请记住 darwin 的RELEASES.json网络合并逻辑同样会执行需确保构建环境可访问该 URL。产物目录规划产物按zip/platform/arch/分目录输出与 S3 的keyResolver按platform/arch/filename组织存储的布局天然匹配直接上传即可。更新清单的一致性currentRelease只记录最新版本releases保留历史记录。若需严格审计可定期将该文件纳入发布产物一起上传。MAS 场景macOS App Store 分发mas 平台不会生成更新清单自动更新需经由 Mac App Store 自身的机制不要依赖此配置。总结electron-forge/maker-zip是 Electron Forge 生态中机制最简单、适用面最广的 Maker跨平台无依赖、产物命名规律清晰、macOS 场景下还能自动维护RELEASES.json静态更新清单。将其与 S3 等对象存储 Publisher 以及update-electron-app组合即可在不引入复杂更新服务器的情况下搭建起一套完整的 macOS 自动更新链路。无论你是需要快速分发测试包还是构建生产级自动更新体系ZIP Maker 都是值得优先掌握的 Forge 构建组件。赞分享开发工具桌面应用前端构建【免费下载链接】forge:electron: A complete tool for building and publishing Electron applications项目地址https://gitcode.com/gh_mirrors/fo/forge点击查看免费下载相关推荐Electron Forge ZIP Maker 完整实战指南跨平台打包与 macOS 静态文件自动更新Electron Forge ZIP Maker 完整实战指南跨平台打包与 macOS 静态文件自动更新 导读 electron forge/maker z开发工具桌面应用前端构建electron-builder 完全指南跨平台打包、签名、自动更新与发布electron builder 完全指南跨平台打包、签名、自动更新与发布 electron builder 是当前 electron builder 仓库构建工具桌面应用开发工具Recordly 自动化发布与跨平台自动更新指南electron-builder electron-updater 全流程解析Recordly 自动化发布与跨平台自动更新指南electron builder electron updater 全流程解析 本篇技术指南以 Recor桌面应用音视频屏幕录制视频处理上一篇终极高效语法检查LanguageTool Python 非AI解决方案深度解析下一篇【亲测免费】 探索NLP_bahasa_resources一站式马来语自然语言处理资源库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表