本文档描述了从源代码构建和打包 draw.io Desktop 应用程序到适用于 Windows、macOS 和 Linux 的分发安装程序的流程。有关持续集成管道的信息,请参阅 持续集成。
draw.io Desktop 的构建过程涉及与核心 draw.io 存储库同步、配置特定于平台的设置以及使用 electron-builder 生成安装程序和包。
来源:package.json11-20 DEVELOPMENT.md14-28
构建过程需要以下关键依赖项
| 依赖项 | 目的 |
|---|---|
| electron-builder | 用于创建分发应用程序的主要打包工具 |
| electron-updater | 启用应用程序中的自动更新功能 |
| electron-context-menu | 提供上下文菜单支持 |
| electron-log | Electron 应用程序的日志记录实用程序 |
| electron-store | 应用程序设置的数据持久化 |
| @electron/notarize | macOS 应用程序公证实用程序 |
| @electron/fuses | Electron 应用程序的安全功能 |
draw.io Desktop 构建过程使用多个 electron-builder 配置文件来支持不同的平台和架构。
package.json 中定义的构建脚本会触发不同的构建配置
| 脚本 | 命令 | 目的 |
|---|---|---|
| release-win | electron-builder --config electron-builder-win.json --publish always | Windows x64 安装程序 |
| release-win32 | electron-builder --config electron-builder-win32.json --publish always | Windows 32 位安装程序 |
| release-win-arm64 | electron-builder --config electron-builder-win-arm64.json --publish always | Windows ARM64 安装程序 |
| release-appx | electron-builder --config electron-builder-appx.json --publish always | Windows 应用商店包 |
| release-linux | electron-builder --config electron-builder-linux-mac.json --publish always | Linux 和 macOS 包 |
| release-snap | electron-builder --config electron-builder-snap.json --publish never | Linux Snap 包 |
--publish always 标志指示 electron-builder 将构建的工件发布到配置的发布通道,通常是 GitHub Releases。
构建之前,必须使用 sync.js(或 sync.cjs)脚本将应用程序与最新的 draw.io 核心代码同步。
同步脚本执行两个主要功能
draw.io/VERSION 获取版本号并更新 package.json 版本draw.io/war/package.json 中指定的依赖项重要提示:最终构建只包含 draw.io/war/package.json 的 dependencies 部分列出的依赖项。为避免重复和膨胀,devDependencies(如 Electron 本身)中的项不包含在内。
来源:package.json13 DEVELOPMENT.md7-8 DEVELOPMENT.md82-88
Windows 构建会生成各种包格式
macOS 和 Linux 构建生成
代码签名是验证应用程序包的真实性和完整性的重要安全步骤。
Windows 构建可以使用以下方式签名
macOS 构建需要 Apple Developer ID 证书
对于自动化构建环境,代码签名证书通过环境变量配置
CSC_LINK:Base64 编码的证书文件或证书 URL(p12/pfx 格式)CSC_KEY_PASSWORD:证书的密码GH_TOKEN:用于发布发布的 GitHub 令牌来源:DEVELOPMENT.md33-37 DEVELOPMENT.md48-61 DEVELOPMENT.md62-79
构建过程通过 CI/CD 服务进行自动化
工作流
来源:DEVELOPMENT.md14-27 DEVELOPMENT.md32-44
| 问题 | 可能解决方案 |
|---|---|
| 缺少版本 | 确保 draw.io/VERSION 文件存在且包含有效的版本 |
| 代码签名失败 | 验证 CSC_LINK 和 CSC_KEY_PASSWORD 环境变量 |
| 依赖冲突 | 检查 draw.io/war/package.json 中依赖项的兼容性 |
| 缺少平台工具 | 确保已安装特定于平台的构建工具 |
draw.io/war/package.json 中的依赖项包含在最终应用程序包中draw.io/war/package.json 中使用 devDependencies 来处理不应包含在构建中的依赖项electron 包应始终位于 devDependencies 中,以避免重复draw.io Desktop 应用程序包含一个基于 electron-updater 构建的自动更新系统,允许它检查和安装更新。更新系统默认使用 GitHub releases 作为其更新源。构建脚本中的 --publish always 标志告诉 electron-builder 将资源上传到 GitHub,供更新系统查找。