雖然B/S是目前開發的主流,可是C/S仍然有很大的市場需求。受限於瀏覽器的沙盒限制,網頁應用沒法知足某些場景下的使用需求,而桌面應用能夠讀寫本地文件、調用更多系統資源,再加上Web開發的低成本、高效率的優點,這種跨平臺方式愈來愈受到開發者的喜好。css
Electron是一個基於Chromium和 Node.js,使用 HTML、CSS和JavaScript來構建跨平臺應用的跨平臺開發框架,兼容 Mac、Windows 和 Linux。目前,Electron已經建立了包括VScode和Atom在內的大量應用。html
建立Electron跨平臺應用以前,須要先安裝一些經常使用的工具,如Node、vue和Electron等。前端
進入Node官網下載頁http://nodejs.cn/download/,而後下載對應的版本便可,下載時建議下載穩定版本。若是安裝Node使用Homebrew方式,建議安裝時將npm倉庫鏡像改成淘寶鏡像,以下所示。vue
npm config set registry http://registry.npm.taobao.org/ 或者 npm install -g cnpm --registry=https://registry.npm.taobao.org
先執行如下命令,確認下本地安裝的vue-cli版本。node
vue -V
若是沒有安裝或者不是最新版,能夠執行如下命令安裝/升級。webpack
npm install @vue/cli -g
使用以下命令安裝Electron插件。git
npm install -g electron 或者 cnpm install -g electron
爲了驗證是否安裝成功,可使用以下的命令。github
electron --version
Electron官方提升了一個簡單的項目,能夠執行如下命令將項目克隆到本地。web
git clone https://github.com/electron/electron-quick-start
而後在項目中執行以下命令便可啓動項目。vue-router
cd electron-quick-start npm install npm start
啓動後項目的效果以下圖。
除此以外,咱們可使用vue-cli腳手架工具來建立項目。
vue init simulatedgreg/electron-vue
而後根據下面的提示一步步選中選項便可建立項目,以下所示。
而後,使用npm install命令安裝項目所須要的依賴包,安裝完成以後,可使用npm run dev或npm run build命令運行electron-vue模版應用程序,運行效果以下圖所示。
Electron 的源代碼主要依據 Chromium 的拆分約定被拆成了許多部分。爲了更好地理解源代碼,您可能須要瞭解一下 Chromium 的多進程架構。
Electron源碼目錄結構和含義具體以下:
Electron ├──atom - Electron 的源代碼 | ├── app - 系統入口代碼 | ├── browser - 包含了主窗口、UI 和其餘全部與主進程有關的東西,它會告訴渲染進程如何管理頁面 | | ├── lib - 主進程初始化代碼中 JavaScript 部分的代碼 | | ├── ui - 不一樣平臺上 UI 部分的實現 | | | ├── cocoa - Cocoa 部分的源代碼 | | | ├── gtk - GTK+ 部分的源代碼 | | | └── win - Windows GUI 部分的源代碼 | | ├── default_app - 在沒有指定 app 的狀況下 Electron 啓動時默認顯示的頁面 | | ├── api - 主進程 API 的實現 | | | └── lib - API 實現中 Javascript 部分的代碼 | | ├── net - 網絡相關的代碼 | | ├── mac - 與 Mac 有關的 Objective-C 代碼 | | └── resources - 圖標,平臺相關的文件等 | ├── renderer - 運行在渲染進程中的代碼 | | ├── lib - 渲染進程初始化代碼中 JavaScript 部分的代碼 | | └── api - 渲染進程 API 的實現 | | └── lib - API 實現中 Javascript 部分的代碼 | └── common - 同時被主進程和渲染進程用到的代碼,包括了一些用來將 node 的事件循環 | | 整合到 Chromium 的事件循環中時用到的工具函數和代碼 | ├── lib - 同時被主進程和渲染進程使用到的 Javascript 初始化代碼 | └── api - 同時被主進程和渲染進程使用到的 API 的實現以及 Electron 內置模塊的基礎設施 | └── lib - API 實現中 Javascript 部分的代碼 ├── chromium_src - 從 Chromium 項目中拷貝來的代碼 ├── docs - 英語版本的文檔 ├── docs-translations - 各類語言版本的文檔翻譯 ├── spec - 自動化測試 ├── atom.gyp - Electron 的構建規則 └── common.gypi - 爲諸如 `node` 和 `breakpad` 等其餘組件準備的編譯設置和構建規則
平時開發時,須要重點關注的就是src、package.json和appveyor.yml目錄。除此以外,其餘須要注意的目錄以下:
使用electron-vue模版建立的Electron工程結構以下圖。
和前端工程的項目結構相似,Electron項目的目錄結構以下所示:
對於開發者來講, 90% 的工做都是在 src 中完成,src 中的文件目錄以下。
Electron應用程序分紅三個基礎模塊:主進程、進程間通訊和渲染進程。
Electron 運行 package.json 的 main 腳本(background.js)的進程被稱爲主進程。 在主進程中運行的腳本經過建立web頁面來展現用戶界面。 一個 Electron 應用老是有且只有一個主進程。
因爲 Electron 使用了 Chromium 來展現 Web 頁面,因此 Chromium 的多進程架構也被使用到。 每一個 Electron 中的 Web 頁面運行在它本身的渲染進程中。在普通的瀏覽器中,Web頁面一般在一個沙盒環境中運行,不被容許去接觸原生的資源。 然而 Electron 容許用戶在 Node.js 的 API 支持下能夠在頁面中和操做系統進行一些底層交互。
主進程使用 BrowserWindow 實例建立頁面。 每一個 BrowserWindow 實例都在本身的渲染進程裏運行頁面。 當一個 BrowserWindow 實例被銷燬後,相應的渲染進程也會被終止。主進程管理全部的Web頁面和它們對應的渲染進程。 每一個渲染進程都是獨立的,它只關心它所運行的 Web 頁面。
在Electron目錄中,src會包包含main和renderer兩個目錄。
main目錄會包含index.js和index.dev.js兩個文件。
renderer是渲染進程目錄,平時項目開發源碼的存放目錄,包含assets、components、router、store、App.vue和main.js。
electron-vue-cloud-music是一款使用Electron+Vue+Ant Design Vue技術開發跨平臺桌面應用。下載連接:https://github.com/xiaozhu188/electron-vue-cloud-music。具備以下特色:
如下是部分運行效果:
qq音樂播放器基於 electron-vue 開發的音樂播放器,界面模仿QQ音樂,使用的技術棧electron-vue+vue+vuex+vue-router+element- UI。可使用以下的方式來運行項目。
git clone https://github.com/SmallRuralDog/electron-vue-music.git cd electron-vue-music npm install # 運行開發模式 npm run dev # 打包安裝文件 npm run build
部分運行效果以下圖。