把一堆工具塞進同一個 App

我想要一個桌面工具,把 Kanban、Git diff、檔案樹、終端機跟本機服務的啟停都放在同一個畫面。排版本身不難,麻煩的是這些工具都會去讀寫電腦上的東西,而且每個的生命週期都不一樣。如果每個 React 元件都自己去叫 Electron 的 API,沒多久通訊的格式就會散得到處都是,改一個地方要找半天。

如果你也在做這種「什麼都想放進來」的 Electron 工具,下面兩件事是我覺得最值得先做的。

先把 IPC 講清楚,再畫畫面

我的做法是把主程序跟畫面之間的 IPC channel 定義放在共用的地方,當成兩邊的合約。資料庫、PTY、Git 跟程序控制都是主程序在管,前端只拿整理好的資料跟可以下的指令。之後要加新功能,我會先決定請求長什麼樣、回什麼、會發哪些事件,最後才去想畫面怎麼擺。

終端機不要跟著畫面一起死掉

終端機不能當成一般的 React state 處理。元件重新掛載不代表 PTY 要被砍掉,關視窗也可能只是縮到系統匣而已。所以終端機的登記、工作階段的還原,跟畫面上的分頁我是分開管的。不然切個畫面,背景在跑的東西就被你中斷了,這個蠻容易踩到的。

現在做到哪

v2 大部分已經重寫完,現在主要在弄以專案為中心的工作區,還有重構終端機。下一步是讓各個畫面越來越不需要知道 Electron 的細節。