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

273 天前
 cococoder

预期

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

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

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

2280 次点击
所在节点    程序员
27 条回复
flyqie
272 天前
好奇这种的需求是啥,大屏吗?大屏也可以自动重新拉起吧?
subframe75361
271 天前
@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
271 天前
@subframe75361 感谢解答,研究了一下你的库,依然有几个问题:
1. 目前这个库的实现方案和直接下载 app.asar 文件然后替换有什么区别?侧重于解决什么问题

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

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