01
Node.js,一個讓 JavaScript 從醜小鴨變成白天鵝的架構
可能很多讀者會感到奇怪,本來是說 Electron,為什麼一開始要提到 Node.js 和 JavaScript 呢?它們是什麼關系呢?别急,聽我慢慢道來。
相信做 JavaScript 開發的讀者對 Node.js 不陌生,Node.js 誕生于 2009 年,類似于 ASP.NET,是用來開發服務端程式的架構,使用的程式設計語言是 JavaScript。
Node.js 給許多開發者的第一印象是用來開發 Web 應用的,然而事實上,正是由于 Node.js 的存在,JavaScript 才摘下了“隻能開發 Web 應用”的帽子。
Node.js 使得 JavaScript 可以像 Python、Java 一樣在終端(或 Windows 指令行)執行,它還提供了大量的 API,利用這些 API,JavaScript 幾乎可以做任何事情。
目前已經有很多依賴 Node.js 的第三方子產品和架構,形成了一個以 Node.js 為核心的龐大生态系統。
在這個生态系統中,有一個分類就是用來開發桌面應用,成為了桌面 GUI,比較著名的包括 NW.js 和 Electron,其中,Electron 更有名氣,連微軟都使用 Electron 開發自己的 IDE——著名的 Visual Studio Code。
此外,用 Electron 開發的應用還有很多,如 Atom、支付寶小程式 IDE(螞蟻開發者工具)等。Electron 最初是由 GitHub 開發并負責維護的,後來 GitHub 被微軟收購了,是以 Electron 現在背後的大樹是微軟。
下圖是 Visual Studio Code:

下圖是螞蟻開發者工具:
至此,也許很多讀者會有新的疑問,為什麼要開發跨平台的桌面應用?為什麼用 Node.js 和 Electron 來開發呢?
現在已經有很多流行的桌面應用開發工具,如微軟的 Visual Studio、跨平台的 QT、Mac 平台 XCode。其實在使用 Node.js 和 Electron 之前,我也有這個疑問,下面就來回答一下。
02
從桌面應用到 Web 應用,再回到桌面應用
20 年前(大約 2000 年前後),絕大多數軟體都以桌面應用的形式存在,像 Word、Excel 就屬于典型的桌面應用,輕按兩下桌面的圖示就可以運作。
這些桌面應用在發售時一般會使用CD光牒(CD 或 DVD),将CD光牒放在精美的包裝盒裡,然後通過各大軟體商店(有線下實體店)銷售,因為那時網際網路還不發達,而且網速極慢,是以隻能通過線下方式銷售軟體。
在購買軟體時,要確定軟體可以相容自己的作業系統(那時候大多數人使用的是 Windows 作業系統),然後從包裝盒中取出CD光牒,将CD光牒中的軟體安裝到自己的計算機中。
縱觀十多年的軟體開發程序,業界發生了巨變,多平台的時代正在慢慢來臨:桌面應用、Web 浏覽器、移動端以及其他平台,作為開發者,我們漸漸覺得,有必要支援多平台計算。
那麼桌面應用呢?桌面應用已經成為我們在日常生活中使用的計算平台之一,自從二十一世紀以來,發生了很多變化。在很多年前,微軟的 Windows 系統是 PC 作業系統領域絕對的霸主,後來蘋果公司的作業系統(Mac OS X),以它的創新性和專業性,削弱了 Windows 的統治地位。
不僅如此,在 2016 年第一季度,谷歌的 Chromebook 成為全美最暢銷的筆記本電腦,或許屬于 Linux 系統的時代也将會來到。關鍵是現在你已經不能隻開發支援 Windows 系統的應用了,還要開發支援蘋果系統和 Linux 的應用。
跨平台的桌面應用并不是什麼新鮮的東西,像 Mono、QT、Java 等早就可以開發出支援多個主流作業系統的桌面應用了。
通常,有 C++、C#、Java 開發經驗的開發者會選擇這樣的技術來開發跨平台應用,但對于 Web 開發者,面對這些技術需要重新學一門語言,是以開發跨平台桌面應用對于 Web 開發者是有一定門檻的。
自從 Electron 出來後,這種情況有了很大的改觀。Electron 可以讓你重用 Web 應用的代碼來建構桌面應用,不僅如此,建構出來的應用可以同時在 Windows、Mac OS X 和 Linux 上運作,這有一個非常大的好處:代碼和技能都可以複用,并且釋放了一撥新的應用。
Electron 桌面應用相對于 Web 應用的優勢有哪些呢?
03
桌面應用的優點
Web 應用受限于網絡和浏覽器特性,在這些方面,桌面應用要優于 Web 應用,下面列出桌面應用的一些優點:
- 啟動和運作不依賴于網絡;
- 桌面應用可以即時啟動,不需要等待資源從網絡上下載下傳完再啟動;
- 桌面應用可以通路計算機的作業系統和硬體資源,包括連接配接在計算機上的硬體裝置;
- 桌面應用可以更好地控制軟體的使用者體驗,不需要擔心不同浏覽器處理 CSS 的規則以及哪些 JavaScript 特性是被支援的;
- 一旦桌面應用安裝到使用者計算機上,就會永遠在那裡,它不像 Web 應用那樣需要一台 Web 伺服器,還需要提供一天 24 小時支援,以防 Web 伺服器當機,當然,如果 Web 服務托管商遇到問題就更糟糕了。
通常,開發桌面應用要求開發者精通像 C++、Objective-C 或者 C# 這樣的語言以及像 .NET、QT、Cocoa 這樣的架構。這對于很多開發者來說,準入門檻有點高,他們很可能會放棄使用這些技術來建構桌面應用。
而 Electron 就不一樣,Electron 使用 JavaScript 開發桌面應用,任何 Web 開發者都很容易上手,就算不是 Web 開發者,學習 JavaScript 相對于 C++、C# 這些語言也非常容易,是以,Electron 的準入門檻非常低。
到現在為止,我們已經了解了 Electron 到底是做什麼的,以及為什麼要用 Electron 來建構桌面應用。
本文選自 GitChat 作者李甯的達人課《Electron 開發入門》,李甯老師會在課程裡全面介紹 Electron 的各種技術,并提供一個完整的實戰案例,感興趣的同學可以訂閱學習。
▼掃碼訂閱課程學習
點選閱讀原文,免費試讀課程