Lastor
1 weeks ago
[Coding] 好聰明喔,在研究 vite-plugin-electron 是怎麼 handle Electron 程序的生命週期
Responses disabled for others than plurk poster
latest #12
Lastor
1 weeks ago
看到他會把 spwan 出來的 electron child_process 給存到 global 的 process 上面
Lastor
1 weeks ago
我就很納悶,他又沒在其他地方用到他,為什麼要存在 global?
Lastor
1 weeks ago
研究了一下發現算是個針對 vite 的 hack
立即下載
Lastor
1 weeks ago
因為這是在 vite serve 啟動時,執行 vite.config 的程序,在裡面去 spwan 子程序
Lastor
1 weeks ago
而 vite.config 本身是有做熱更新的,如果在啟動的狀態下去改 vite.config,那 plugin 會整個重跑
Lastor
1 weeks ago
與 src 的檔案 onChange 熱更新不一樣,正常改專案的檔案去熱更新,是不會觸發 vite.config 重跑的
Lastor
1 weeks ago
由於是整個 vite.config 被重新執行,所以正常用 let + 閉包手法去存的 electron process 會直接掉了,導致 if 判斷無法知道已經有一個 electron 被開起來
Lastor
1 weeks ago
然而 vite.config 的 reload 本身,只是重新加載執行 config,vite 起的 node 進程並沒有 restart
Lastor
1 weeks ago
所以存在 process 裡面的東西還會存在!!
Lastor
1 weeks ago
套件作者就是用這樣有點 hack 的方式,把 electron child 存到 global process 上,這樣 vite config 重跑的時候,他就可以偵測到上一個 electron 是否存在
Lastor
1 weeks ago
如果是用正規手段,應該是要去監聽 vite dev server 的 onClose 事件,可是這會讓起動 Electron 這件事被限制住,他就很難暴露出去讓 user 自定義
Lastor
1 weeks ago
乾脆存到 global process 上面,直接解決了許多的問題
back to top