这是借助 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