为什么 electron 不做成独立的 runtime?

2022-01-18 11:20发布

首先我们要为Runtime使用者提供一个专有的打包工具,我们就叫它:打包工具。这个打包工具还内置了几个可执行程序,我们给他们起个名字,分别叫:

  1. 最终安装程序

  2. 最终执行程序

  3. 最终卸载程序

因为electron是可定制的,每个项目都可以根据自身需求做出微调,最终就产生了不同修改的运行时,而你看锁定在系统里不可定制的webview2(基于msedge),就可以很方便地不带runtime分发。

打包工具的职责:

1、按Runtime使用者的要求修改最终执行程序的图标、应用签名、版本、版权、文件名等资源信息。

2、按Runtime使用者的要求修改最终卸载程序的图标、应用签名、版本、版权、文件名等资源信息。

3、把最终执行程序、最终卸载程序与Runtime使用者开发好的HTML/CSS/JS等静态文件放到一起,压缩成一个压缩包,我们叫他:资源文件

4、把这个资源文件以资源的形式封装到最终安装程序中;按Runtime使用者的要求修改这个最终安装程序的图标、应用签名、版本、版权、文件名等资源信息。

很多linux发行版就是把electron打包成独立的runtime啊。但是electron的迭代太快了,导致比如vscode从来都落后官方1到2个大版本号,所以就算是独立打包你还是会得到electron全家桶。而且electron小版本很多,独立打包要解决小版本共存问题。而且vscode的非oss版本也只能把electron打包进去。

简单来说就是,就是时代变了,软件分发策略也变了。macOS和linux就是两种策略的典型代表。Linux提倡模块化共享,每个软件都显式声明依赖关系,再配上包管理机制,基本上可以做到缺什么库就自动下载什么库。这样的好处就在于如果多个软件依赖同一个版本的库,那么系统就只安装一份这样的库,从而避免了不必要的空间消耗。

macOS及同类风格的iOS提倡“整体打包”,每个软件及其依赖的第三方库全部放在一个Bundle里,所谓的app本质上就是Bundle文件夹。这样做的优点就在于安装简单,直接复制即可,系统整体上没有什么耦合性,反正app各管各的。缺点是软件体积大,文件重复率高。

Windows下两种策略都有,但由于没有统一的包管理机制,多数情况下还是得需要用户提前安装相关的依赖。有的软件做了比较完善的安装程序,则由安装程序负责维护相关依赖。

整体上看,随着生产成本降低,存储空间变大,读写和传输效率提高,相比于上个世纪,人们越来越不在意空间浪费的问题,更愿意拿空间换时间,近些年的技术发展无不在证明这一趋势。因此,整体打包的分发策略可能终将占领上风。