這是藉助 Electron 框架,構建一個在 Linux 桌面上原生運行的開源電子郵件服務的故事。linux
Tutanota 是一種安全的開源電子郵件服務,它可經過瀏覽器使用,也有 iOS 和 Android 應用。其客戶端代碼在 GPLv3 下發布,Android 應用程序可在 F-Droid 上找到,以便每一個人均可以使用徹底與 Google 無關的版本。git
因爲 Tutanota 關注開源和 Linux 客戶端開發,所以咱們但願爲 Linux 和其餘平臺發佈一個桌面應用程序。做爲一個小團隊,咱們很快就排除了爲 Linux、Windows 和 MacOS 構建原生應用程序的可能性,並決定使用 Electron 來構建咱們的應用程序。github
對於任何想要快速交付視覺一致的跨平臺應用程序的人來講,Electron 是最適合的選擇,尤爲是若是你已經有一個 Web 應用程序,想要從瀏覽器 API 的束縛中擺脫出來時。Tutanota 就是這樣一個案例。瀏覽器
Tutanota 基於 SystemJS 和 Mithril,旨在爲每一個人提供簡單、安全的電子郵件通訊。 所以,它必須提供不少用戶指望從電子郵件客戶端得到的標準功能。安全
因爲採用了現代 API 和標準,其中一些功能(如基本的推送通知、搜索文本和聯繫人以及支持雙因素身份驗證)很容易在瀏覽器中提供。其它功能(例如自動備份或無需咱們的服務器中轉的 IMAP 支持)須要對系統資源的限制性訪問,而這正是 Electron 框架提供的功能。服務器
雖然有人批評 Electron 「只是一個基本的包裝」,但它有明顯的好處:babel
Tutanota 不依靠於大筆的投資資金,而是依靠社區驅動的項目。基於愈來愈多的用戶升級到咱們的免費服務的付費計劃,咱們有機地發展咱們的團隊。傾聽用戶的需求不只對咱們很重要,並且對咱們的成功相當重要。框架
提供桌面客戶端是 Tutanota 用戶最想要的功能,咱們感到自豪的是,咱們如今能夠爲全部用戶提供免費的桌面客戶端測試版。(咱們還實現了另外一個高度要求的功能 —— 搜索加密數據 —— 但這是另外一個主題了。)electron
咱們喜歡爲用戶提供簽名版本的 Tutanota 並支持瀏覽器中沒法實現的功能,例如經過後臺進程推送通知。 如今,咱們計劃添加更多特定於桌面的功能,例如 IMAP 支持(而不依賴於咱們的服務器充當代理),自動備份和離線可用性。post
咱們選擇 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 容許咱們很容易地與不一樣平臺的桌面環境集成,但你不能低估投入的時間!最後,正是這些小事情佔用了比咱們預期更多的時間,但對完成桌面客戶端項目也相當重要。
特定於平臺的代碼致使了大部分阻礙:
因爲用戶對不一樣平臺上的應用程序的某些(有時不直接兼容)行爲的指望,此過程有點複雜。使三個版本感受像原生的須要一些迭代,甚至須要對 Web 應用程序進行一些適度的補充,以提供相似於瀏覽器中的文本搜索的功能。
咱們在 Electron 方面的經驗基本上是積極的,咱們在不到四個月的時間內完成了該項目。儘管有一些至關耗時的功能,但咱們感到驚訝的是,咱們能夠輕鬆地爲 Linux 提供一個測試版的 Tutanota 桌面客戶端。若是你有興趣,能夠深刻了解 GitHub 上的源代碼。
via: opensource.com/article/19/…
做者:Nils Ganther 選題:lujun9972 譯者:wxy 校對:wxy