Electron免安装增量更新

前言

因为需要网页和pc客户端应用,所以公司的部分产品,使用electron将web项目打包成了应用程序,一方面是简单便捷,另一方面也是因为需求并不是十分复杂,electron提供的基本可以解决我们的需求。
并且electron配合electron-builder实现了版本自动更新安装,看似美好,结果还是疯狂被销售和客服吐槽……
众所周知,electron对win7的支持并不好,还是抽搐型的,正常win7可能没啥问题,有些则需要设置兼容性才能正常打开。
但是一旦更新,并且重新安装以后,属性里面兼容性的小勾子,就烟消云散了。你说客户看得懂文档还行,写个文档勾一勾,万事大吉。但偏偏有些特立独行的,永远整不明白,整不明白怎么办呢,找我们客服,让我们客服远程单程安装一下。
上面一种也还行,更离谱的是装了有些杀毒软件的,360啊,金山毒霸啊,更新之后直接不让装了,直接扑街,于是又联系客服,一个个重新装。上个月,上线频繁了点,客服直接冲过来,指着我的脑袋一顿臭骂,要我给个说法。我堂堂七尺男儿,被一个妹子指着头,这怎么能忍,直接当场妥协。反正,哄女生都是一个道理,完不成的直接迂回战术,马上就改,下次一定!
但是,刚好最近手头空了下来,就勉为其难,不做渣男!

开始

一查资料,发现确实大家也都遇到了这个问题,也发现了一篇大佬的文章,写得挺好的,文章链接等下结尾会扔出来。
因为electron其实可以看做一个浏览器,还能打开f12的开发者工具,只是把我们的资源加载进去,呈现在应用程序里,毕竟api用的也很形象win.loadFile(***.html);
思路其实很简单,我们经常的功能需求,或者bug修改,都只是静态资源的变更,像js,css,html等,只需要将原有的静态资源替换,然后刷新一下资源即可,并不需要重新安装整个程序。

实现

在打包的同时,生成exe文件的同时,也会生成一个unpack的文件夹,resource里的就是我们打包的静态资源,如果不选择asar模式,我们的js文件,还有html文件等,就会直接暴露在文件夹里。

1.png

2.png

然后,在我们安装完exe以后,我们找到安装的目录下,找到resources文件夹,发现我们的静态资源,就被放在这里,(如果是没有使用asar打包的话,会显示一个app的文件夹,里面就是我们的静态资源文件),问题似乎就变得容易了起来!

3.png

我们只要讲新的打包文件的中的静态资源拿出来,然后覆盖掉本地中原来有的静态文件,是不是就能完成更新了呢?

贴代码环节

4.png

5.png

6.png

其实逻辑十分简单。判断版本号是否一致,不一致的话,就去加载文件,然后解压,覆盖原有的静态文件,重新加载webContent。推荐不使用asar模式进行打包,因为中间一次测试时候,出了点小问题,但是后来再也没有复现出来过,但还是有隐患,下次遇到了,再进行补充。
这是更新前的index.html,下面是更新后的gif,可以发现html和js都进行了变更。

7.png

demo2.gif

后续

基本方案已经定下来了,后续就是完整地更新方案了。初步定的是,在下载目录中,再加一个json文件,用来读取版本更新内容,更新版本,还有是否需要重新安装或者是只更新静态资源。然后应用程序通过读取json文件,来判断执行哪种更新方式。

结语

这回真没啥好结语的,就是踩在了巨人的肩膀上,根据网上找的思路,代码,实现了一遍具体应用而已,因为我感觉方案还是不够完善,如果前面写的有问题的话,希望能够多多交流,帮我指正一下问题,谢谢谢谢谢!

例行公事,公众号:懒狗小前端

参考文献:
www.cnblogs.com/mapleChain/…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享