electron发展至今,已经相对完善,打包应用有electron-builder,更新有electron-updater,不过具体的使用方式还需要一定的摸索,在摸索过程中难免出现一些问题,在此描述下我遇到的问题和解决方法。
业务场景是,我们有一个electron应用,需要在mac和win两个平台下提供给用户,这个项目接手的时候打包配置已经比较完善,用的是electron-builder,不过更新有问题,总是更新失败,另外在win上有些用户打开会白屏,经过一番尝试发现用vista兼容模式打开可以避免白屏现象,因此我们考虑在打包过程中将兼容模式打开这一信息写入注册表。
1.写注册表
electron-builder本身支持引入nsis脚本,我们也做了一些尝试,不知道是不是使用姿势不对,使用include选项引入脚本,打包时一直报错,无法成功,于是只能选择将electron-builder的打包结果,win-unpacked文件夹,再用NSIS打包一遍
没有桌面客户端开发经历的同学可能不知道NSIS这个软件,百度一下教程也很多,比如这个
安装的时候,先安装NSIS本体,再安装NIS editor,不然打开NIS editor使用的时候,向导模式里有一步选择语言走不下去
用的时候,我们用NIS editor,会有一个向导帮助我们生成一个样例脚本,不过很多功能是需要我们拿着这个样例脚本自己去增删的,比如前面提到的写注册表,就可以通过WriteRegStr语句来完成
2.更新
electron-updater是根据electron-builder生成的yml文件(需要配置publish选项)来进行更新的,其中有一步是会验证安装包的sha值,NSIS打包后,这个验证显然就无法通过了,所以我就自己写了一个更新用的包electron-tiny-updater
支持yml文件也支持自己写一个json文件,需要把配置文件和更新包上传服务器或者CDN,需要更新的时候,先下载配置文件,进行版本比对,再下载安装包,下载安装包的时候会提供一个download-progress
事件监听下载进度
const {tinyUpdater} = require('electron-tiny-updater'); const path = require('path'); const emitter = tinyUpdater({ currentVersion: '1.0.2', // 当前应用的版本号,可以通过package.json来引入 configType: 'yml', // 配置文件类型,支持yml和json格式两种 configUrl: 'https://xxx.com/latest.yml', // 配置文件的url configFilename: 'latest.yml', // 配置文件名 pkgFilename: 'app.exe', // 安装包名称 filePath: path.join(__dirname, '../..') // 文件保存的路径 }); // 第一个参数total表示安装包的总大小,第二个参数length表示当前已下载的大小 emitter.on('download-progress', (total, length)=>{ console.log(total, length, 'progress') }); emitter.on('error', (e)=>{ console.log(e, 'error') });