菜单

构建与打包

相关源文件

本文档描述了从源代码构建和打包 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-logElectron 应用程序的日志记录实用程序
electron-store应用程序设置的数据持久化
@electron/notarizemacOS 应用程序公证实用程序
@electron/fusesElectron 应用程序的安全功能

来源:package.json37-55

构建配置

draw.io Desktop 构建过程使用多个 electron-builder 配置文件来支持不同的平台和架构。

配置结构

package.json 中定义的构建脚本会触发不同的构建配置

脚本命令目的
release-winelectron-builder --config electron-builder-win.json --publish alwaysWindows x64 安装程序
release-win32electron-builder --config electron-builder-win32.json --publish alwaysWindows 32 位安装程序
release-win-arm64electron-builder --config electron-builder-win-arm64.json --publish alwaysWindows ARM64 安装程序
release-appxelectron-builder --config electron-builder-appx.json --publish alwaysWindows 应用商店包
release-linuxelectron-builder --config electron-builder-linux-mac.json --publish alwaysLinux 和 macOS 包
release-snapelectron-builder --config electron-builder-snap.json --publish neverLinux Snap 包

--publish always 标志指示 electron-builder 将构建的工件发布到配置的发布通道,通常是 GitHub Releases。

来源:package.json14-19

同步流程

构建之前,必须使用 sync.js(或 sync.cjs)脚本将应用程序与最新的 draw.io 核心代码同步。

同步脚本执行两个主要功能

  1. draw.io/VERSION 获取版本号并更新 package.json 版本
  2. 安装 draw.io/war/package.json 中指定的依赖项

重要提示:最终构建只包含 draw.io/war/package.jsondependencies 部分列出的依赖项。为避免重复和膨胀,devDependencies(如 Electron 本身)中的项不包含在内。

来源:package.json13 DEVELOPMENT.md7-8 DEVELOPMENT.md82-88

特定平台构建流程

Windows 构建流程

Windows 构建会生成各种包格式

  • 适用于 x64、32 位和 ARM64 架构的 NSIS 安装程序
  • 用于企业部署的 MSI 包
  • 无需安装即可使用的便携式 EXE 版本
  • Windows 应用商店 (APPX) 包,用于在 Microsoft Store 分发

来源:package.json14-17

macOS 和 Linux 构建过程

macOS 和 Linux 构建生成

  • macOS 的 DMG 包
  • 适用于 Linux 发行版的 AppImage、DEB 和 RPM 包
  • 通过单独的配置和构建脚本的 Snap 包

来源:package.json18-19

代码签名

代码签名是验证应用程序包的真实性和完整性的重要安全步骤。

Windows 代码签名

Windows 构建可以使用以下方式签名

  • 代码签名证书:适用于 CI 环境的标准证书
  • EV 代码签名证书:扩展验证证书(需要物理 USB 令牌,不适用于 CI)

macOS 代码签名

macOS 构建需要 Apple Developer ID 证书

  • Developer ID Application:用于签名应用程序包
  • Developer ID Installer:用于签名安装程序包(用于 Mac App Store 以外的分发)
  • 第三方 Mac Developer Application/Installer:用于 Mac App Store 分发

CI/CD 代码签名配置

对于自动化构建环境,代码签名证书通过环境变量配置

  • CSC_LINK:Base64 编码的证书文件或证书 URL(p12/pfx 格式)
  • CSC_KEY_PASSWORD:证书的密码
  • GH_TOKEN:用于发布发布的 GitHub 令牌

来源:DEVELOPMENT.md33-37 DEVELOPMENT.md48-61 DEVELOPMENT.md62-79

自动化构建过程 (CI/CD)

构建过程通过 CI/CD 服务进行自动化

工作流

  1. 代码被推送到 GitHub 存储库
  2. Travis CI 构建 macOS 和 Linux 包
  3. AppVeyor 构建 Windows 包
  4. 构建的工件会自动上传到 GitHub 发布草稿
  5. 所有工件可用后,手动验证并发布发布

来源:DEVELOPMENT.md14-27 DEVELOPMENT.md32-44

疑难解答常见的构建问题

常见的构建失败

问题可能解决方案
缺少版本确保 draw.io/VERSION 文件存在且包含有效的版本
代码签名失败验证 CSC_LINKCSC_KEY_PASSWORD 环境变量
依赖冲突检查 draw.io/war/package.json 中依赖项的兼容性
缺少平台工具确保已安装特定于平台的构建工具

依赖管理技巧

  • draw.io/war/package.json 中的依赖项包含在最终应用程序包中
  • draw.io/war/package.json 中使用 devDependencies 来处理不应包含在构建中的依赖项
  • electron 包应始终位于 devDependencies 中,以避免重复

来源:DEVELOPMENT.md82-88

更新系统

draw.io Desktop 应用程序包含一个基于 electron-updater 构建的自动更新系统,允许它检查和安装更新。更新系统默认使用 GitHub releases 作为其更新源。构建脚本中的 --publish always 标志告诉 electron-builder 将资源上传到 GitHub,供更新系统查找。

来源:package.json45