最近發現nodejs可以做桌面應用,主要是之前的同事在搞,我也要稍微研究下不能落后啊,基於nodejs的桌面應用,常用的就是nw.js和electron,nw出的比較早,資料比較多,bug也很多,它的前身是node-webkit文檔可以參考nw.js,微信web開發工具、釘釘都是基於 nw.js 開發的,nw.js支持xp,還有很多人抱着xp過日子呢。而electron比較全比較新,在github的文檔electron也比較多,有中文文檔的,成型的case很多Electron由github主導,有成熟的殺手級產品atom和vs code,Intel和微軟都有參與,社區還是很活躍的。

原理研究
web-native技術是基於 Chromium 和 Node.js 運行的。chromium的商業化產品就是我們熟悉的chrome瀏覽器。chromium基本就是一個操作系統,里面提供了非常復雜的協議棧和各種功能,包括但不限於:
跨平台的系統資源訪問,如文件系統
各種互聯網相關協議,如HTTP, HTTPS, FTP, DNS, etc.
強大的並發處理能力
各種壓縮協議和算法
頁面快速渲染
javascript執行引擎
磁盤緩存機制
electron做了如下事情:
(1) 將nodejs和chromium的結合起來,讓使用者可以調用node.js的函數,讓你可以使用幾乎所有的nodejs社區里的module。
(2) 合並nodejs和chromium兩者里的web引擎(都基於v8)。這樣所有javascript運行在一個context下。
(3) 修改沙箱模型,去除很多對桌面應用而言沒有意義的安全手段,讓應用可以最大程度訪問本地資源(比如文件,本地網絡等)。
一旦環境跑起來,就跟做一個網頁幾乎就沒什么區別,加載CSS,圖片啊,JS就可以了。因為本質上,electron就是給你搞了一個Chrome瀏覽器的殼子,只是比傳統網頁多了一個訪問桌面文件的功能,跟cordova其實沒有多大的差別,只是底層和運行環境稍有不同。所以不管是什么jquery,vue,react,cycle.js,bs,dojo,prototype拉起來就是干,也不用擔心兼容性。
看下electron主打的功能
自動更新
原生的菜單 & 通知
崩潰報告
調試 & 性能分析
Windows 安裝程序
一個基礎的Electron包含三個文件:package.json(元數據),main.js(代碼)andindex.html(圖形用戶界面)。框架由Electron可執行文件(Windows中為electron.exe、macOS中為electron.app、Linux中為electron)提供。開發者可以自行添加標志、自定義圖標、重命名或編輯Electron可執行文件。
下面是nw.js和electron的相關功能對比圖




跑個程序試下electron
git clone https://github.com/electron/electron-quick-start cd electron-quick-start cnpm install //是cnpm啊! npm start
通過上面的一頓操作你會獲取到一個window的窗口
//下面是發布流程
npm install electron-packager -g electron-packager . helloworld --out ../electron
就可以在上級目錄的electron/helloworld-win32-x64中的找到一個helloworld.exe來使用,這就是window下的程序了。
js統一江湖指日可待
參考資料
用nodejs開發桌面應用
用Nodejs開發桌面應用。NW.js 和 Electron 各有什么優缺點,你選擇哪個?
NW.js & Electron Compared (2016 Edition) - TangibleJS
