Electron自动更新

注:本文使用的是 electron-builder 配合 electron-updataer 实现自动更新效果。该方案仅在 Windows环境中适用,Mac环境比本文多一步安装证书,需要自行解决,Linux环境请直接跳过本文。


更新流程

  • 使用 electron-builder 构建生成 latest.yml (mac软件是latest-mac.yml)以及安装包等文件;
  • 将 latest.yml 以及生成的安装包放在一个静态资源服务器上,指向这些文件的根路径;
  • 项目启动后 electron-updataer 检查更新,若有新版本自动更新;

electron-builder 构建程序

1、安装 electron-builder

npm install electron-builder --save-dev

npm install module-name --save 自动把模块和版本号添加到dependencies部分
npm install module-name --save-dev 自动把模块和版本号添加到devDependencies部分

2、配置package.json

package.json文件中的 version 值,控制着打出来包的版本。

 在package.json文件中把下面的打包配置写在和 scripts 配置同级的地方。

"build": {
    "productName":"xxxx",       //项目名 这也是生成的exe、dmg文件的前缀名
    "appId": "com.xxx.xxxxx",   //包名   打包mac时写成自己应用的appId,打包Windows随意添写  
    "copyright":"xxxx",         //版权信息  安装好后出品公司显示的就是该内容
    "directories": {            //打包输出位置的文件夹
      "output": "./out"
    }, 
    "nsis": {   //nsis相关配置,打包方式为nsis时生效
      "oneClick": false,                                //是否一键安装
      "allowElevation": true,                           //允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序。
      "allowToChangeInstallationDirectory": true,       //允许修改安装目录
      "installerIcon": "./aa.ico",                      //安装图标
      "uninstallerIcon": "./aa.ico",                    //卸载图标
      "installerHeaderIcon": "./aa.ico",                //安装时头部图标
      "createDesktopShortcut": true,                    //创建桌面图标
      "createStartMenuShortcut": true,                  //创建开始菜单图标
      "shortcutName": "xxxx",                           //图标名称
    },
    "publish": [
      {
        "provider": "generic",      //服务器提供商,也可以是GitHub、自己服务器等,全部都在这个值就行
        "url": "http://xxxxx/"      //服务器地址  里面可以访问到 latest.yml 以及生成的安装包
      }
    ],
    "files": [  //打包后需要使用的h5相关文件 
      "./css", 
      "./html",
      "./js",
      "./index.html"
    ],
    "dmg": {     //macOSdmg 打包mac软件使用的,这个可以不动
      "contents": [
        {
          "x": 410,
          "y": 150,
          "type": "link",
          "path": "/Applications"
        },
        {
          "x": 130,
          "y": 150,
          "type": "file"
        }
      ]
    },
    "win": {
      "icon": "./aims.ico",      //软件图标
      "target": [
        {
          "target": "nsis",      //使用nsis打成安装包,"portable"打包成免安装版,默认使用niss,win平台一般也是用这个
          "arch": [              //打包出来的安装包是64位还是32位,推荐使用32位,这样的包比较小
            "ia32"              //32位 
          ]
        }
      ]
    },
    "mac": {                    //软件图标
      "icon": "./icon.icns"
    },
    "linux": {
      "icon": "./icons"
    }
  }

3、打包生成软件

 在package.json文件scripts 配置中加上下面两行

"scripts": {
    "start": "electron-forge start", 
    "buildwin": "electron-builder --win",  //这行
    "buildmac": "electron-builder --mac"   //这行
},

打包生成windos安装包

npm run buildwin

 打包生成mac安装包(mac这一步需要配置证书,我没搞mac的软件,这步请自行解决

npm run buildmac

electron-updater 更新程序

1、将更新文件放到服务器

将 latest.yml (mac软件是latest-mac.yml)以及安装包放到一个可以访问的地方,可以是GitHub、自己服务器等,只要你上面打包的路径能访问到就行。

2、安装 electron-updater

npm install electron-updater --save

3、安装 electron-log

安装这个依赖包是为了看更新进度

npm install electron-log --save

注意:项目运行中的用到依赖包,除了 electron 包,其他的都要在package.json文件 dependencies 配置中写上包名和依赖名称,我们用到了 electron-updater 、electron-log 所以写法如下图:

4、在main.js中写软件更新代码

const {app, Menu, BrowserWindow, dialog} = require('electron');
const {autoUpdater} = require('electron-updater');
const path = require('path');
const logger = require("electron-log");

//打印log到本地
logger.transports.file.maxSize = 1002430; // 10M
logger.transports.file.format = "[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}";
logger.transports.file.resolvePath = () => "./operation.log"; //打印在你安装的软件位置,


//每次启动自动更新检查 更新版本 --可以根据自己方式更新,定时或者什么
autoUpdater.checkForUpdates();

autoUpdater.autoDownload = false;//这个必须写成false,写成true时,我这会报没权限更新,也没清楚什么原因
autoUpdater.on('error', (error) => {
    logger.error(["检查更新失败", error])
})
//当有可用更新的时候触发。 更新将自动下载。
autoUpdater.on('update-available', (info) => {
    logger.info('检查到有更新,开始下载新版本')
    autoUpdater.downloadUpdate()
})
//当没有可用更新的时候触发。
autoUpdater.on('update-not-available', () => {
    logger.info('没有可用更新')
})
//在更新下载完成的时候触发。
autoUpdater.on('update-downloaded', (res) => {
    logger.info('下载完毕!提示安装更新')
    //dialog 想要使用,必须在BrowserWindow创建之后
    dialog.showMessageBox({
        title: '升级提示!',
        message: '已为您下载最新应用,点击确定马上替换为最新版本!'
    }).then((index) => {
        logger.info('退出应用,安装开始!')
        //重启应用并在下载后安装更新。 它只应在发出 update-downloaded 后方可被调用。
        autoUpdater.quitAndInstall()
    });
})
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值