news 2026/10/16 2:30:26

PiDeck 打包发布全流程:electron-builder 构建 Windows、macOS、Linux 三平台安装包完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PiDeck 打包发布全流程:electron-builder 构建 Windows、macOS、Linux 三平台安装包完整指南

【免费下载链接】PiDeck

PiDeck 是一个开源的桌面工作台,用于在本地项目目录中统一管理 PI | DSH Agent 会话,并支持导入 Codex、Claude 本地会话以便统一浏览和恢复。支持多项目工作区、会话历史、Git 集成、内置终端、模型配置和插件管理,基于 Electron 构建。

项目地址:https://gitcode.com/gh_mirrors/pide/PiDeck
点击查看免费下载

PiDeck是一个基于 Electron 的开源桌面工作台,用于统一管理本地项目中的 PI / DSH Agent 会话。这篇文章带你走通它的打包发布全流程:如何用 electron-builder 一条命令产出 Windows(NSIS / portable / zip)、macOS(dmg / zip)、Linux(AppImage / deb / tar.gz)三平台安装包,以及如何借助 preflight 门禁和 CI 流水线把发布风险降到极低。

一、打包前你需要知道的三件事

PiDeck 的技术栈是Electron + React + TypeScript,打包链路分为两层:

层级工具职责
代码构建electron-vite把src/编译成out/下的 main / preload / renderer 产物
安装包构建electron-builder把out/+ 依赖 + 图标打成各平台原生安装包

所有打包配置集中在 package.json 的build字段中,包括:

  • asar: true+compression: maximum—— 代码打进 asar 归档并做最高档压缩,减小安装体积;
  • asarUnpack—— 把node-pty、sharp、koffi等原生模块保留在 asar 外,保证.node二进制可被正确加载;
  • extraResources—— 附带内置扩展、提示词库、技能库、宠物资源、DSH runtime 等数据文件;
  • afterPack钩子指向 after-pack-cleanup.js —— 打包后自动删除 Electron 52 个多余语言包(只留中/繁中/英文,节省约 42MB)并清理非运行时文件。

💡 新手提示:想本地跑通一遍,先装好依赖(npm install),再执行npm run build完成代码构建,之后所有dist:*脚本都会自动先触发它。

二、三平台打包命令速查

PiDeck 为每个平台封装了专用脚本,用法非常一致:

npm run dist:win # Windows:nsis + portable + zip 三格式 npm run dist:win -- nsis # 只打 NSIS 安装器 npm run dist:mac # macOS:dmg + zip npm run dist:linux # Linux:AppImage + deb + tar.gz npm run dist:linux:arm64 # Linux ARM64 变体 npm run pack # 快速验证:只产 unpacked 目录,不出安装包 npm run dist:fast # 日常迭代:跳过类型检查 + 低压缩 + 单格式

各平台产物格式如下:

平台产物说明
Windows*.exe(NSIS 安装器 / portable 便携版)、*.zip安装器支持自选目录、桌面/开始菜单快捷方式
macOS*.dmg、*.zip按${arch}区分 x64 / arm64 产物命名
Linux*.AppImage、*.deb、*.tar.gzdeb 包名pideck,并声明了对旧包pi-desktop的替代关系

所有产物统一输出到release/目录,文件名由artifactName模板生成(如PiDeck-0.9.0-setup.exe),版本号自动取自package.json。

2.1 Windows 打包:自动校验更新资产

dist-win.js 在打完包后会做一次额外的"自动更新资产"体检:Windows 端依赖 electron-updater 的 NSIS provider,latest.yml、setup.exe和对应.blockmap三者必须同时上传到同一个 Release,缺任何一个都会导致客户端无法安全差分更新。脚本会直接告诉你缺了什么,避免发布后用户升级失败。

2.2 Linux 原生模块的 glibc 基线

内置终端依赖node-pty原生模块。CI 中在 Debian 10 容器里重建它,确保产物只依赖 glibc 2.28——否则在统信 UOS 20、麒麟 V10 等国产系统上会因openpty符号绑定新 GLIBC 而无法加载。打包后可用 linux-native-baseline.js 对包内app.asar.unpacked做 ELF 符号扫描验证。

三、发版前门禁:一条命令跑完所有检查

正式发版前,PiDeck 要求先跑 release-preflight.mjs(即npm run preflight)。它把机器可判定的门禁收口成四个并行泳道:

  1. typecheck——tsc --noEmit全量类型检查;
  2. unit-tests——node --test全量单元测试;
  3. format—— biome 格式检查;
  4. release—— 发布一致性:版本号 / CHANGELOG / README 三处一致、模型目录与扩展清单等--check生成器同步、DSH wire payload 形状、Electron 二进制体检等 10 余项。

设计亮点是"不首错即停":所有泳道跑完才汇总,一次看到全部问题,完整 JSON 报告落盘release-preflight/。常用变体:

npm run preflight # 默认四泳道 npm run preflight -- --e2e # 追加 Playwright E2E(较慢) npm run preflight -- --skip unit-tests # 日常快速通道

完整发版清单见 release-process.md:CHANGELOG 中英条目要同步、版本号写入package.json/package-lock.json、安装包至少做一遍人工 smoke——发版前不能只依赖 CI 构建成功。

四、CI 全自动发布流水线

手动打包装的是"信任本地环境",而正式发版走的是全自动化流水线,核心文件是 release.yml。触发方式有两种:

  • 推送 tag:git push一个v*形式的 tag 即全自动触发;
  • 手动 workflow_dispatch:可选 tag(带auto哨兵值 = 按package.json版本号发)、并可选发布通道。

流水线结构一览:

push tag v* ├─ resolve-version 解析版本 / tag / 通道(stable 或 dev) ├─ extract-changelog 从 CHANGELOG.zh-CN.md 抽取该版本正文作 Release 说明 ├─ build-release (矩阵并行) │ ├─ windows-latest → nsis + portable + zip │ ├─ macos-latest ×2 → dmg + zip(x64 与 arm64 分 job) │ └─ ubuntu ×2 → AppImage + deb + tar.gz(x64 与 arm64 原生 runner) └─ pack-dsh-runtime 单 runner 交叉打包 6 平台的 DSH runtime tgz

几个值得注意的工程细节:

  • 单发布方不变量:所有构建 job 都带--publish never,发布统一由末尾的 softprops 步骤用 PAT 完成,避免多 job 抢发同一个 Release;
  • dev 双品牌通道:channel=dev走 dist-dev.js,产出独立的 "PiDeck Dev" 包(独立 appId、独立pideck-dev://协议),以 prerelease 形式发布,不抢占/releases/latest,与 stable 通道互不影响;
  • 跨平台 runtime:DSH runtime 的 6 个平台 tgz 由单个 ubuntu runner 交叉打包完成,补齐了 win32-arm64 / darwin-x64 等平台缺口(见 dsh-runtime-cross-pack.md);
  • Linux 双门禁:构建前在 glibc 2.28 基线重建原生模块,构建后再解包 deb 验证 ELF 符号,防止 runner 升级后静默回退。

日常快速验证则可用 build-windows.yml 等手动构建 workflow,从最新 main 分支产出安装包供下载测试。

五、发布后:自动更新与镜像同步

安装包发出后,闭环由两件事完成:

  1. 客户端自动更新:package.json中publish指向 GitHub Release,electron-updater 按平台读取对应的latest.yml/latest-mac.yml拉取增量更新(.blockmap支撑差分下载);
  2. 镜像同步:发布事件触发sync-atomgit.yml,待资产清单稳定后把 Release(含安装包)增量同步到 AtomGit 镜像,国内用户可就近下载。

六、给新手的打包 Checklist

📋 按这个顺序走,可以覆盖 95% 的发布场景:

  1. npm run preflight全绿(红灯先修再重试);
  2. CHANGELOG.md/CHANGELOG.zh-CN.md写好本次版本条目,中英文条目数一致;
  3. package.json版本号已 bump,发版提交用chore: release vX.Y.Z;
  4. 本地至少跑一次目标平台npm run dist:win/dist:mac/dist:linux并人工 smoke 安装包;
  5. 推送 tagvX.Y.Z,让 CI 全自动构建并发布 Release;
  6. 核对 Release 资产齐全(含latest.yml、.blockmap),再等镜像同步完成。

⚠️ 常见坑:dist:fast产物只用于日常验证,不要用它对外发布——它跳过了类型检查、最高档压缩和 afterPack 清理,正式发布前必须跑完整dist:*命令。

PiDeck 的整套发布链路可以概括为:本地脚本保证可复现,preflight 门禁保证一致性,CI 矩阵保证多平台覆盖。理解了这三层,你就能独立维护一个 Electron 应用的完整发布流程了。

【免费下载链接】PiDeck

PiDeck 是一个开源的桌面工作台,用于在本地项目目录中统一管理 PI | DSH Agent 会话,并支持导入 Codex、Claude 本地会话以便统一浏览和恢复。支持多项目工作区、会话历史、Git 集成、内置终端、模型配置和插件管理,基于 Electron 构建。

项目地址:https://gitcode.com/gh_mirrors/pide/PiDeck
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 2:26:55

虚拟陀螺仪(软陀螺)适用角速度范围技术分析

摘要本文档详细分析了虚拟陀螺仪技术的特点、工作原理及其适用的角速度范围。通过对比虚拟陀螺仪与物理陀螺仪的性能差异,为不同应用场景的选择提供技术参考。1. 虚拟陀螺仪概述1.1 技术定义虚拟陀螺仪是一种基于软件算法的解决方案,通过融合加速度计和磁…

作者头像 李华
网站建设 2026/10/16 2:24:00

递归导致栈溢出的底层原理与排查修复实战

去年接手的一个服务突然在线上崩了,日志里全是stack overflow之类的报错,当时团队的第一反应是“有死循环”,结果查了半天发现代码逻辑没有任何死循环,真正的原因是某条业务数据的嵌套层级太深,一个普通的递归函数把函…

作者头像 李华
网站建设 2026/10/16 2:23:55

【C++修炼】模板初阶:泛型编程、函数模板、类模板

目录 模板初阶 一、泛型编程 二、函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 三、类模板 3.1 类模板的定义格式 3.2 类模板的实例化 模板初阶 一、泛型编程 代码示例 1.1 // C语言实现多种参数…

作者头像 李华