electron-vite
electron-vite copied to clipboard
修复:preload config是function时报错;特性:`main` 更新后 Electron 重启和 `preload` 更新后重新挂载
fix: preload config will error when preload config is a function.
feat: restart Electron after main update and reload render page after preload update .
修复:preload config是function时报错。 特性:main 更新后 Electron 重启和 preload 更新后重新挂载。
Description
修复
- 错误代码:
src/config.ts文件内290行代码if (!isObject(preloadViteConfig)) {。 - 错误描述:此bug会导致
electron.vite.config.{js|ts|mjs|cjs}配置文件内的preload属性定义为function时,报错Error: preload config must export or return an object。 - 修改后代码:
if (!isObject(preloadConfig)) {。
特性
-
特性描述:
main更新后 Electron 重启和preload更新后重新挂载。 -
修改文件:
src/server.ts。 -
使用方式:
// file: electron.vite.config.{js|ts|mjs|cjs} export default defineConfig({ main: ({ command }) => ({ build: { watch: command === 'serve' ? {} : undefined, // ... }, }), preload: ({ command }) => ({ build: { watch: command === 'serve' ? {} : undefined, // ... } }), renderer: { // ... } }) -
已修改
README文档
Additional context
为什么要提供「main 更新后 Electron 重启和 preload 更新后重新挂载」的特性?
我注意到 主进程不支持热更新么? 中的讨论,引用其中的一段话:
electron主进程的热更新实际为node模块更替,也有一些关于node的热更新方案,但实际应用很少也不成熟。在electron中也有一些社区模块通过检测并重启electron进程方式达到目的,但这不是热更新的概念,这种方式并不友好,不是很好的开发实践。electron-vite 渲染进程的热更新是基于vite下browser环境, electron-vite 没有关于主进程的热更新实现。
诚然,重启electron进程,不是热更新的概念,但我觉得这是可行的,有以下三点理由:
- 监视
main和preload的更新是一个需求,很多开发者都需要这个特性。 vue-cli-plugin-electron-builder是一个成熟的插件,也是通过重启electron进程的方式完成这个需求的,那么我们也可以这么做,将是否使用这个特性的决定权交给使用者往往更好(使用者可以通过在electron.vite.config.{js|ts|mjs|cjs}文件内设置{main|preload}.build.watch属性方便的开启或关闭这个特性)。- 最关键的一点是,如果增加了这个特性,那是多么的酷!
最后,我想表达下我的感谢,此仓库electron-vite为我在vite环境下开发electron提供了很大帮助,希望它变得更好,期望您考虑此功能!
What is the purpose of this pull request?
- [x] Bug fix
- [X] New Feature
- [X] Documentation update
- [ ] Other
Before submitting the PR, please make sure you do the following
- [X] Read the Contributing Guidelines.
- [X] Read the Pull Request Guidelines and follow the Commit Convention.
- [X] Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g.
fixes #123).
感谢大佬关注这个问题 目前我这边采用的临时解决方案是nodemon 监听 main 和 preload 进行主进程的重启; 当然更希望采用官方的写法
@Beiluola 感谢你对electron-vite项目的肯定,也非常感谢你花费时间参与贡献(包括你提的上一个PR),能感觉到你非常专业。
关于主进程和preload脚本的热更新问题,在最早的时候是有类似此PR的实现。但在我长期的实践中,诸如一个不小心保存就重启,实际代码并没有写完整。这种反复过程和不可选择性,给我带来困扰。所以,我会认为这是一个不好的开发调试体验,在 eletron-vite 中就没有去关注这一点。我也尝试过node模块化重载的方式而非重启进程的方式,但不是很靠谱。重启进程好像是唯一可行的。你提到的一点非常好,让开发者自己选择。但我在思考会不会导出plugin的形式会更好,同时支持glob的配置,让开发者有更多选择的配置:thinking:。可能需要一些更全面的思考。
Thank you very much for your PR, it is valuable. the new implementation has been released, check it out https://cn-evite.netlify.app/guide/hot-reloading.html