drawio-desktop Linux 构建与打包实践指南
【免费下载链接】drawio-desktopOfficial electron build of draw.io项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop
给同事装画图工具,对方只要"拖一个文件进 Linux 就能用"的那种。这篇带你从源码构建 drawio-desktop:完成后dist/目录里会有可直接运行的 AppImage 和可在 Debian/Ubuntu 系系统上安装的 deb 包,都是能直接分发的 Linux 构建产物。
drawio-desktop 是用 Electron(一种用网页技术写桌面应用的框架)封装 draw.io 编辑器核心的官方桌面版,Apache 2.0 协议,图表数据全部存在本地。项目里图表编辑核心以 git submodule(嵌套子仓库)形式放在drawio/目录,这是后面克隆时容易踩的第一个坑。
🚀 快速出包:最短路径
先确认本机三样依赖,Node 版本必须不低于 22.12(见 package.json 里的engines字段):
node -v && npm -v && git --version版本没问题后,按顺序执行下面这条最短出包路线:
git clone --recursive https://gitcode.com/GitHub_Trending/dr/drawio-desktop cd drawio-desktop npm install npm run sync npx electron-builder --config electron-builder-linux-mac.json --linux AppImage --x64 --publish never逐句说明:
clone --recursive必须带上,否则子仓库drawio/是空的,构建直接失败;npm run sync会把子仓库drawio/VERSION里的版本号写进package.json,不跑它打包出来的版本号是错的;npx electron-builder调用打包工具读配置出包,--publish never表示只生成本地文件、不往任何远端发布。
跑完后去dist/找产物,文件名形如draw.io-x64-31.3.2.AppImage(按版本号、架构自动拼出来)。给 AppImage 加上执行权限后双击即可运行,你的第一个 Linux 产物到手,再往下看细节。
🔍 构建体系拆解
整个打包只涉及一个工具 + 一份平台配置,关键配置项都集中在 electron-builder-linux-mac.json(Linux 和 macOS 共用这份文件):
| 配置项 | 位置 | 作用(白话) |
|---|---|---|
| 构建工具 | electron-builder,见 package.json | 把 Electron 应用和依赖打成安装介质的打包器 |
| target | 配置linux.target | 出哪些格式:AppImage、deb、rpm 三种 |
| arch | 同上每个 target 内 | x64 与 arm64 双架构,可单独指定 |
| executableName | linux.executableName | 装好后程序叫drawio |
| icon | linux.icon | 图标取./build/目录,各尺寸图标已备好 |
| category | linux.category | 应用菜单里归到"Graphics"图形类 |
| appId | 顶层 | 应用唯一标识com.jgraph.drawio.desktop |
| artifactName | 顶层 | 产物命名模板产品名-架构-版本.扩展名 |
| 输出目录 | directories.output | 所有产物落到./dist/ |
| 版本来源 | sync.cjs | 构建前从子仓库同步版本号 |
另外注意两点:npmRebuild为false,说明项目不依赖需要本地重编译的原生模块,省掉一个常见卡点;asar为true,代码会被压进一个包文件里,这是 Electron 应用的标准做法。
📦 产物格式对照
三种格式的出包命令是同一个通用写法:在--linux后面列格式名(如AppImage),架构用--x64或--arm64指定。各格式差异如下表:
| 格式 | 适用系统 | 产物命名规则 | 安装方式 |
|---|---|---|---|
| AppImage | 各大发行版通用 | draw.io-x64-<版本>.AppImage | 免安装:chmod +x加执行权限后直接运行 |
| deb | Debian、Ubuntu 及其衍生 | draw.io-x64-<版本>.deb | sudo dpkg -i 包名.deb或双击安装 |
| rpm | Fedora、openSUSE 等 | draw.io-x64-<版本>.rpm | sudo rpm -i 包名.rpm;本机需先装好 rpm 打包工具 |
差异补充说明:AppImage 是"单文件即应用",适合拷 U 盘分发,但首次运行可能需要按系统提示授予执行权限;deb 和 rpm 会注册桌面菜单入口和.drawio文件关联,适合长期在固定机器上使用。想同时出三种格式,就在--linux后面写AppImage deb rpm,一条命令全出。
🛠 踩坑速查
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
构建报找不到drawio/内文件 | 克隆时漏了--recursive,子仓库为空 | 在仓库根目录执行git submodule update --init |
| npm install 卡住或 404 | 网络访问 npm 官方源不畅 | 换国内镜像:npm config set registry https://registry.npmmirror.com后重试 |
| 报错提示 Node 版本不满足 | Node 低于 22.12 | 用 nvm 或系统包升级 Node,node -v复核 |
| 出 rpm 失败 | 系统缺 rpm 构建工具链 | 装发行版对应的rpm包;不急就先只出 AppImage 和 deb |
EACCES: permission denied写文件 | 曾用 sudo 跑过 npm,目录属主变成 root | 用普通用户重跑npm install(不要用 sudo 跑 npm) |
| AppImage 打开报架构相关错误 | x64 包用在了 ARM 机器(或反了) | 换--arm64重新构建对应架构的包 |
| 自改版被自动更新"覆盖"回官方版 | 本地构建默认开着自动更新 | 构建前执行npm run sync -- disableUpdate关掉自更新 |
📚 下一步
- 其他平台:仓库里还有 electron-builder-win.json、electron-builder-appx.json 等配置,配合
npm run release-win、npm run release-snap脚本可出 Windows 和 Snap 包,写法与本文完全同构; - 个人/二次构建:想改代码自用(免签名构建),仓库有专门文档 doc/BUILDING_FOR_PERSONAL_USE.md,含
DRAWIO_UNSIGNED用法; - 发版流程:官方 CI 如何触发、产物怎么发布,见 doc/RELEASE_PROCESS.md 和 README.md;
- 求助渠道:这个项目不接受外部 PR(issue 是唯一的反馈渠道),构建中遇到本文没覆盖的问题,建议带着完整报错日志去仓库提 issue 求助。
【免费下载链接】drawio-desktopOfficial electron build of draw.io项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考