linux系统下打包electron+vue项目(AppImage、deb),方法同样使用于国产麒麟系统。AppImage支持自动更新,而deb不支持自动更新。本文中涉及自动更新的逻辑处理,及打包配置和打包参数。
打包工具及自动更新工具
- 打包工具 electron-builder.
- 自动更新工具electron-updater . 特别需要注意的是,自动更新linux仅支持AppImage格式的打包文件,deb格式的并不支持。
- 自动更新时需要判断是否是linux的AppImage ,以下是伪代码。
// 触发检测
if (is.macOS() && is.windows()) {
autoUpdater.checkForUpdatesAndNotify().catch();
} else if (is.linux()) {
if (process.env["APPIMAGE"] == null) {
if (process.env["SNAP"] == null) {
xdLogInfo("linux APPIMAGE env is not defined, current application is not an AppImage");
}
else {
xdLogInfo("linux SNAP env is defined, updater is disabled");
}
xdLogInfo("linux autoupdate only for APPIMAGE env , current application is not an AppImage");
return ;
} else {
// 触发自动更新的最新版本检测
autoUpdater.checkForUpdatesAndNotify().catch();
}
}
linux打包配置
"linux": {
"icon": "build/icons",
"artifactName": "${productName}-${os}-${version}-${arch}.${ext}",
"target": [ "deb","AppImage" ],
"category": "Utility"
},
打包为deb
- x64架构打包命令
"build-l-64-test": "electron-builder --config=./electron/config/builder.test.json -l=deb --x64",
- arm64架构打包命令,需要使用系统fpm.
使用electron-builder打包时需要用到fpm包,但fpm包npm仓库源仅有x86_64架构的包,下不了arm架构的,打包时会有报错,必须使用arm架构的包。解决方案是我们可以从系统源中安装ruby,然后使用gem install fpm来安装fpm,然后设置全局变量,使用系统fpm执行打包,关键配置为USE_SYSTEM_FPM=true。更详细操作参见electron在ubuntu arm64芯片上打包失败fpm架构不符
"build-l-arm64-test": "USE_SYSTEM_FPM=true electron-builder --config=./electron/config/builder.test.json -l=deb --arm64",
打包为AppImage
- 打包命令
"build-l-64-ai-test": "electron-builder --config=./electron/config/builder.test.json -l=AppImage --x64",
- 第一次打包会去下载appimage的系统包,下载后存入npm缓存路径中。
- 第二次以后打包,会直接使用缓存中内容,不再下载appimage包。
- 注意,双击.AppImage文件就可以直接运行,无需安装。当AppImage尝试运行时,它依赖于FUSE来解析其打包的文件系统结构.需要系统安装fuse支持.
sudo apt-get update
sudo apt-get install fuse