electron 中有没有什么成熟的热更新的方案?

2024-03-23 11:29:30 +08:00
 cococoder

预期

  1. 实现 asar 文件以及其他 app.asar.unpack 文件的更新,目前在 git 上找到过几个库,基本是基于 asar 文件的更新,而且 star 很少,不是完全符合我的预期

  2. 最好是能不重启,实现真正意义上的热更,万一有什么野路子呢

  3. 是否知道有那些应用有过类似的方案,可以借鉴一下的

2906 次点击
所在节点    程序员
27 条回复
flyqie
2024-03-24 17:47:29 +08:00
好奇这种的需求是啥,大屏吗?大屏也可以自动重新拉起吧?
subframe75361
2024-03-24 21:09:36 +08:00
@cococoder #20
关于打包你可以看一下这个 https://github.com/electron-vite/vite-plugin-electron-renderer?tab=readme-ov-file#dependency-pre-bundling

我自己的 side project 实测 better-sqlite3 和 napi-rs 相关的库是可以打包的,其他的暂时没有需求就没有测试过。至于加载其他的模块,可以直接调用 app.asar 里的 js 函数,我的库也提供了简化的加载方法

cococoder
2024-03-24 23:09:30 +08:00
@subframe75361 感谢解答,研究了一下你的库,依然有几个问题:
1. 目前这个库的实现方案和直接下载 app.asar 文件然后替换有什么区别?侧重于解决什么问题

2. 可能是之前没用过 vite-plugin-electron ,目前是看 vite-plugin-electron 是有点强耦合的,我理解 vite-plugin-electron 这个库 vite 和 electron 结合更多是方便本地开发,和你的更新相关的功能关系不大

3. 是否有个简单的 demo 能跑起来的
cococoder
2024-03-24 23:14:09 +08:00
@flyqie 热更需求挺常见的吧,比如 hot fix ,这里主要是『不重启』为了不影响用户体验,有些更新能无感尽量无感
subframe75361
2024-03-25 00:26:54 +08:00
@cococoder #23
1. 直接替换 asar 文件需要额外的可执行文件进行覆盖和重启,并且原生模块也需要放进更新包里,增大体积的同时还会添加其他平台的依赖(当然可以通过构建不同平台的更新包解决)。我认为原生模块的热更新需求肯定远小于其他模块,所以我觉得把原生模块放到 app.asar 里,其他代码放到另外一个 asar 里加载比较合理(而且减小体积的同时只需要打一个包)
2. 是的,这个库其实是对 Obsidian 热更新策略的开源实现+用于构建的 vite 插件,提供一种实现思路。选用 vite 也只是因为自己在用的时候遇到了一些通用的问题(比如说冗余的 node_modules ),就写了个库出来。
3. 本地有一个,有空整理上传一下
cococoder
2024-03-25 10:14:58 +08:00
@subframe75361 关于第一点,目前我了解到的直接替换 asar 文件在 mac 上是不需要额外的可执行文件的,windows 上不确定。难得遇到一个在 electron 更新上了解比较深的,不知道是否可以加个联系方式,后面一起交流下,vx: c2hhZG93X0xCSg==
subframe75361
2024-03-25 11:57:42 +08:00
@cococoder #26 我看过的所有热更新的文章里都是要用 exe 启动更新进程的,应该是 windows 机制,自己也没有尝试过。至于了解,其实我也只有一个 sideproject 的经验😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1026289

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX