linux系统下打包electron+vue项目(AppImage、deb)

511 阅读2分钟

linux系统下打包electron+vue项目(AppImage、deb),方法同样使用于国产麒麟系统。AppImage支持自动更新,而deb不支持自动更新。本文中涉及自动更新的逻辑处理,及打包配置和打包参数。

打包工具及自动更新工具

  • 打包工具 electron-builder.
  • 自动更新工具electron-updater . 特别需要注意的是,自动更新linux仅支持AppImage格式的打包文件,deb格式的并不支持。

image.png

  • 自动更新时需要判断是否是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",

image.png

  • 第一次打包会去下载appimage的系统包,下载后存入npm缓存路径中。
  • 第二次以后打包,会直接使用缓存中内容,不再下载appimage包。
  • 注意,双击.AppImage文件就可以直接运行,无需安装。当AppImage尝试运行时,它依赖于FUSE来解析其打包的文件系统结构.需要系统安装fuse支持.
sudo apt-get update
sudo apt-get install fuse

参考