日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Vue Electron開(kāi)發(fā)跨平臺(tái)桌面應(yīng)用

 尹培西 2020-02-19

(給前端大學(xué)加星標(biāo),提升前端技能.)

作者:xiangzhihong

segmentfault.com/a/1190000021376934

前言
雖然 B/S 是目前開(kāi)發(fā)的主流,但是 C/S 仍然有很大的市場(chǎng)需求。受限于瀏覽器的沙盒限制,網(wǎng)頁(yè)應(yīng)用無(wú)法滿足某些場(chǎng)景下的使用需求,而桌面應(yīng)用可以讀寫(xiě)本地文件、調(diào)用更多系統(tǒng)資源,再加上 Web 開(kāi)發(fā)的低成本、高效率的優(yōu)勢(shì),這種跨平臺(tái)方式越來(lái)越受到開(kāi)發(fā)者的喜愛(ài)。
Electron 是一個(gè)基于 Chromium 和 Node.js,使用 HTML、CSS 和 JavaScript 來(lái)構(gòu)建跨平臺(tái)應(yīng)用的跨平臺(tái)開(kāi)發(fā)框架,兼容 Mac、Windows 和 Linux。目前,Electron 已經(jīng)創(chuàng)建了包括 VScode 和 Atom 在內(nèi)的大量應(yīng)用。
環(huán)境搭建
創(chuàng)建 Electron 跨平臺(tái)應(yīng)用之前,需要先安裝一些常用的工具,如 Node、vue 和 Electron 等。
安裝 Node
進(jìn)入 Node 官網(wǎng)下載頁(yè) http:///download/,然后下載對(duì)應(yīng)的版本即可,下載時(shí)建議下載穩(wěn)定版本。如果安裝 Node 使用 Homebrew 方式,建議安裝時(shí)將 npm 倉(cāng)庫(kù)鏡像改為淘寶鏡像,如下所示。
npm config set registry http://registry.npm./
或者
npm install -g cnpm --registry=https://registry.npm.
安裝/升級(jí) vue-cli
先執(zhí)行以下命令,確認(rèn)下本地安裝的 vue-cli 版本。
vue -V
如果沒(méi)有安裝或者不是最新版,可以執(zhí)行以下命令安裝/升級(jí)。
npm install @vue/cli -g
安裝 Electron
使用如下命令安裝 Electron 插件。
npm install -g electron
或者
cnpm install -g electron
為了驗(yàn)證是否安裝成功,可以使用如下的命令。
electron --version
創(chuàng)建運(yùn)行項(xiàng)目
Electron 官方提供了一個(gè)簡(jiǎn)單的項(xiàng)目,可以執(zhí)行以下命令將項(xiàng)目克隆到本地。
git clone https://github.com/electron/electron-quick-start
然后在項(xiàng)目中執(zhí)行如下命令即可啟動(dòng)項(xiàng)目。
cd electron-quick-start
npm install
npm start
啟動(dòng)后項(xiàng)目的效果如下圖。
除此之外,我們可以使用 vue-cli 腳手架工具來(lái)創(chuàng)建項(xiàng)目。
vue init simulatedgreg/electron-vue
然后根據(jù)下面的提示一步步選中選項(xiàng)即可創(chuàng)建項(xiàng)目,如下所示。
然后,使用 npm install 命令安裝項(xiàng)目所需要的依賴包,安裝完成之后,可以使用 npm run dev 或 npm run build 命令運(yùn)行 electron-vue 模版應(yīng)用程序,運(yùn)行效果如下圖所示。
Electron 源碼目錄
Electron 的源代碼主要依據(jù) Chromium 的拆分約定被拆成了許多部分。為了更好地理解源代碼,您可能需要了解一下 Chromium 的多進(jìn)程架構(gòu)。
Electron 源碼目錄結(jié)構(gòu)和含義具體如下:
Electron
├──atom - Electron 的源代碼
| ├── app - 系統(tǒng)入口代碼
| ├── browser - 包含了主窗口、UI 和其他所有與主進(jìn)程有關(guān)的東西,它會(huì)告訴渲染進(jìn)程如何管理頁(yè)面
| | ├── lib - 主進(jìn)程初始化代碼中 JavaScript 部分的代碼
| | ├── ui - 不同平臺(tái)上 UI 部分的實(shí)現(xiàn)
| | | ├── cocoa - Cocoa 部分的源代碼
| | | ├── gtk - GTK+ 部分的源代碼
| | | └── win - Windows GUI 部分的源代碼
| | ├── default_app - 在沒(méi)有指定 app 的情況下 Electron 啟動(dòng)時(shí)默認(rèn)顯示的頁(yè)面
| | ├── api - 主進(jìn)程 API 的實(shí)現(xiàn)
| | | └── lib - API 實(shí)現(xiàn)中 Javascript 部分的代碼
| | ├── net - 網(wǎng)絡(luò)相關(guān)的代碼
| | ├── mac - 與 Mac 有關(guān)的 Objective-C 代碼
| | └── resources - 圖標(biāo),平臺(tái)相關(guān)的文件等
| ├── renderer - 運(yùn)行在渲染進(jìn)程中的代碼
| | ├── lib - 渲染進(jìn)程初始化代碼中 JavaScript 部分的代碼
| | └── api - 渲染進(jìn)程 API 的實(shí)現(xiàn)
| | └── lib - API 實(shí)現(xiàn)中 Javascript 部分的代碼
| └── common - 同時(shí)被主進(jìn)程和渲染進(jìn)程用到的代碼,包括了一些用來(lái)將 node 的事件循環(huán)
| | 整合到 Chromium 的事件循環(huán)中時(shí)用到的工具函數(shù)和代碼
| ├── lib - 同時(shí)被主進(jìn)程和渲染進(jìn)程使用到的 Javascript 初始化代碼
| └── api - 同時(shí)被主進(jìn)程和渲染進(jìn)程使用到的 API 的實(shí)現(xiàn)以及 Electron 內(nèi)置模塊的基礎(chǔ)設(shè)施
| └── lib - API 實(shí)現(xiàn)中 Javascript 部分的代碼
├── chromium_src - 從 Chromium 項(xiàng)目中拷貝來(lái)的代碼
├── docs - 英語(yǔ)版本的文檔
├── docs-translations - 各種語(yǔ)言版本的文檔翻譯
├── spec - 自動(dòng)化測(cè)試
├── atom.gyp - Electron 的構(gòu)建規(guī)則
└── common.gypi - 為諸如 `node` 和 `breakpad` 等其他組件準(zhǔn)備的編譯設(shè)置和構(gòu)建規(guī)則
平時(shí)開(kāi)發(fā)時(shí),需要重點(diǎn)關(guān)注的就是 src、package.json 和 appveyor.yml 目錄。除此之外,其他需要注意的目錄如下:
  • script - 用于諸如構(gòu)建、打包、測(cè)試等開(kāi)發(fā)用途的腳本
  • tools - 在 gyp 文件中用到的工具腳本,但與 script 目錄不同, 該目錄中的腳本不應(yīng)該被用戶直接調(diào)用
  • vendor - 第三方依賴項(xiàng)的源代碼,為了防止人們將它與 Chromium 源碼中的同名目錄相混淆, 在這里我們不使用 third_party 作為目錄名
  • node_modules - 在構(gòu)建中用到的第三方 node 模塊
  • out - ninja 的臨時(shí)輸出目錄
  • dist - 由腳本 script/create-dist.py 創(chuàng)建的臨時(shí)發(fā)布目錄
  • external_binaries - 下載的不支持通過(guò) gyp 構(gòu)建的預(yù)編譯第三方框架
應(yīng)用工程目錄
使用 electron-vue 模版創(chuàng)建的 Electron 工程結(jié)構(gòu)如下圖。
和前端工程的項(xiàng)目結(jié)構(gòu)類似,Electron 項(xiàng)目的目錄結(jié)構(gòu)如下所示:
  • electron-vue:Electron模版配置。
  • build:文件夾,用來(lái)存放項(xiàng)目構(gòu)建腳本。
  • config:中存放項(xiàng)目的一些基本配置信息,最常用的就是端口轉(zhuǎn)發(fā)。
  • node_modules:這個(gè)目錄存放的是項(xiàng)目的所有依賴,即 npm install 命令下載下來(lái)的文件。
  • src:這個(gè)目錄下存放項(xiàng)目的源碼,即開(kāi)發(fā)者寫(xiě)的代碼放在這里。
  • static:用來(lái)存放靜態(tài)資源。
  • index.html:則是項(xiàng)目的首頁(yè)、入口頁(yè),也是整個(gè)項(xiàng)目唯一的HTML頁(yè)面。
  • package.json:中定義了項(xiàng)目的所有依賴,包括開(kāi)發(fā)時(shí)依賴和發(fā)布時(shí)依賴。
對(duì)于開(kāi)發(fā)者來(lái)說(shuō), 90% 的工作都是在 src 中完成,src 中的文件目錄如下。
Electron 應(yīng)用程序分成三個(gè)基礎(chǔ)模塊:主進(jìn)程、進(jìn)程間通信和渲染進(jìn)程。
1、主進(jìn)程
Electron 運(yùn)行 package.json 的 main 腳本(background.js)的進(jìn)程被稱為主進(jìn)程。在主進(jìn)程中運(yùn)行的腳本通過(guò)創(chuàng)建web頁(yè)面來(lái)展示用戶界面。一個(gè) Electron 應(yīng)用總是有且只有一個(gè)主進(jìn)程。
2、渲染進(jìn)程
由于 Electron 使用了 Chromium 來(lái)展示 Web 頁(yè)面,所以 Chromium 的多進(jìn)程架構(gòu)也被使用到。每個(gè) Electron 中的 Web 頁(yè)面運(yùn)行在它自己的渲染進(jìn)程中。在普通的瀏覽器中,Web 頁(yè)面通常在一個(gè)沙盒環(huán)境中運(yùn)行,不被允許去接觸原生的資源。然而 Electron 允許用戶在 Node.js 的 API 支持下可以在頁(yè)面中和操作系統(tǒng)進(jìn)行一些底層交互。
3、主進(jìn)程與渲染進(jìn)程通信
主進(jìn)程使用 BrowserWindow 實(shí)例創(chuàng)建頁(yè)面。每個(gè) BrowserWindow 實(shí)例都在自己的渲染進(jìn)程里運(yùn)行頁(yè)面。當(dāng)一個(gè) BrowserWindow 實(shí)例被銷毀后,相應(yīng)的渲染進(jìn)程也會(huì)被終止。主進(jìn)程管理所有的 Web 頁(yè)面和它們對(duì)應(yīng)的渲染進(jìn)程。每個(gè)渲染進(jìn)程都是獨(dú)立的,它只關(guān)心它所運(yùn)行的 Web 頁(yè)面。
src 目錄結(jié)構(gòu)
在 Electron 目錄中,src 會(huì)包包含 main 和 renderer 兩個(gè)目錄。
main 目錄
main 目錄會(huì)包含 index.js 和 index.dev.js 兩個(gè)文件。
  • index.js:應(yīng)用程序的主文件,electron 也從這里啟動(dòng)的,它也被用作 webpack 產(chǎn)品構(gòu)建的入口文件,所有的 main 進(jìn)程工作都應(yīng)該從這里開(kāi)始。
    index.dev.js:此文件專門(mén)用于開(kāi)發(fā)階段,因?yàn)樗鼤?huì)安裝 electron-debug 和 vue-devtools。一般不需要修改此文件,但它可以擴(kuò)展開(kāi)發(fā)的需求。

渲染進(jìn)程
renderer 是渲染進(jìn)程目錄,平時(shí)項(xiàng)目開(kāi)發(fā)源碼的存放目錄,包含 assets、components、router、store、App.vue 和 main.js。
assets:assets 下的文件如(js、css)都會(huì)在 dist 文件夾下面的項(xiàng)目目錄分別合并到一個(gè)文件里面去。components:此文件用于存放應(yīng)用開(kāi)發(fā)的組件,可以是自定義的組件。router:如果你了解 vue-router,那么 Electron 項(xiàng)目的路由的使用方式和 vue-router 的使用方式類似。modules:electron-vue 利用 vuex 的模塊結(jié)構(gòu)創(chuàng)建多個(gè)數(shù)據(jù)存儲(chǔ),并保存在 src/renderer/store/modules 中。
相關(guān)案例
  • https://github.com/xiaozhu188/electron-vue-cloud-music

  • https://github.com/SmallRuralDog/electron-vue-music

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多