我們是如何使用 Electron 構建 Linux 桌面應用程序的
Tutanota 是一種安全的開源電子郵件服務,它可通過瀏覽器使用,也有 iOS 和 Android 應用。其客戶端代碼在 GPLv3 下發布,Android 應用程序可在 F-Droid 上找到,以便每個人都可以使用完全與 Google 無關的版本。
由於 Tutanota 關注開源和 Linux 客戶端開發,因此我們希望為 Linux 和其他平台發布一個桌面應用程序。作為一個小團隊,我們很快就排除了為 Linux、Windows 和 MacOS 構建原生應用程序的可能性,並決定使用 Electron 來構建我們的應用程序。
對於任何想要快速交付視覺一致的跨平台應用程序的人來說,Electron 是最適合的選擇,尤其是如果你已經有一個 Web 應用程序,想要從瀏覽器 API 的束縛中擺脫出來時。Tutanota 就是這樣一個案例。
Tutanota 基於 SystemJS 和 Mithril,旨在為每個人提供簡單、安全的電子郵件通信。 因此,它必須提供很多用戶期望從電子郵件客戶端獲得的標準功能。
由於採用了現代 API 和標準,其中一些功能(如基本的推送通知、搜索文本和聯繫人以及支持雙因素身份驗證)很容易在瀏覽器中提供。其它功能(例如自動備份或無需我們的伺服器中轉的 IMAP 支持)需要對系統資源的限制性訪問,而這正是 Electron 框架提供的功能。
雖然有人批評 Electron 「只是一個基本的包裝」,但它有明顯的好處:
- Electron 可以使你能夠快速地為 Linux、Windows 和 MacOS 桌面構造 Web 應用。事實上,大多數 Linux 桌面應用都是使用 Electron 構建的。
- Electron 可以輕鬆地將桌面客戶端與 Web 應用程序達到同樣的功能水準。
- 發布桌面應用程序後,你可以自由使用開發功能添加桌面端特定的功能,從而增強可用性和安全性。
- 最後但同樣重要的是,這是讓應用程序具備原生的感覺、融入用戶系統,而同時保持其識別度的好方法。 ### 滿足用戶的需求
Tutanota 不依靠於大筆的投資資金,而是依靠社區驅動的項目。基於越來越多的用戶升級到我們的免費服務的付費計劃,我們有機地發展我們的團隊。傾聽用戶的需求不僅對我們很重要,而且對我們的成功至關重要。
提供桌面客戶端是 Tutanota 用戶最想要的功能,我們感到自豪的是,我們現在可以為所有用戶提供免費的桌面客戶端測試版。(我們還實現了另一個高度要求的功能 —— 搜索加密數據 —— 但這是另一個主題了。)
我們喜歡為用戶提供簽名版本的 Tutanota 並支持瀏覽器中無法實現的功能,例如通過後台進程推送通知。 現在,我們計劃添加更多特定於桌面的功能,例如 IMAP 支持(而不依賴於我們的伺服器充當代理),自動備份和離線可用性。
我們選擇 Electron 是因為它的 Chromium 和 Node.js 的組合最適合我們的小型開發團隊,因為它只需要對我們的 Web 應用程序進行最小的更改。在我們開始使用時,可以將瀏覽器 API 用於所有功能特別有用,隨著我們的進展,慢慢地用更多原生版本替換這些組件。這種方法對附件下載和通知特別方便。
調整安全性
我們知道有些人關注 Electron 的安全問題,但我們發現 Electron 在 Web 應用程序中微調訪問的選項非常令人滿意。你可以使用 Electron 的安全文檔和 Luca Carettoni 的Electron 安全清單等資源,來幫助防止 Web 應用程序中不受信任的內容發生災難性事故。
實現特定功能
Tutanota Web 客戶端從一開始就構建了一個用於進程間通信的可靠協議。我們利用 Web 線程在加密和請求數據時保持用戶界面(UI)響應性。當我們開始實現我們的移動應用時,這就派上用場,這些應用程序使用相同的協議在原生部分和 Web 視圖之間進行通信。
這就是為什麼當我們開始構建桌面客戶端時,很多用於本機推送通知、打開郵箱和使用文件系統的部分等已經存在,因此只需要實現原生端(Node.js)。
另一個便利是我們的構建過程使用 Babel 轉譯器,它允許我們以現代 ES6 JavaScript 編寫整個代碼庫,並在不同環境之間混合和匹配功能模塊。這使我們能夠快速調整基於 Electron 的桌面應用程序的代碼。但是,我們也遇到了一些挑戰。
克服挑戰
雖然 Electron 允許我們很容易地與不同平台的桌面環境集成,但你不能低估投入的時間!最後,正是這些小事情佔用了比我們預期更多的時間,但對完成桌面客戶端項目也至關重要。
特定於平台的代碼導致了大部分阻礙:
- 例如,窗口管理和托盤仍然在三個平台上以略有不同的方式處理。
- 註冊 Tutanota 作為默認郵件程序並設置自動啟動需要深入 Windows 註冊表,同時確保以 UAC 兼容的方式提示用戶進行管理員訪問。
- 我們需要使用 Electron 的 API 作為快捷方式和菜單,以提供複製、粘貼、撤消和重做等標準功能。
由於用戶對不同平台上的應用程序的某些(有時不直接兼容)行為的期望,此過程有點複雜。使三個版本感覺像原生的需要一些迭代,甚至需要對 Web 應用程序進行一些適度的補充,以提供類似於瀏覽器中的文本搜索的功能。
總結
我們在 Electron 方面的經驗基本上是積極的,我們在不到四個月的時間內完成了該項目。儘管有一些相當耗時的功能,但我們感到驚訝的是,我們可以輕鬆地為 Linux 提供一個測試版的 Tutanota 桌面客戶端。如果你有興趣,可以深入了解 GitHub 上的源代碼。
via: https://opensource.com/article/19/4/linux-desktop-electron
作者:Nils Ganther 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive