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