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