Electron 入門 - Electron的進(jìn)程介紹及創(chuàng)建項(xiàng)目的三種方式

Electron

Electron是由Github開發(fā)弥鹦,用HTML惶凝,CSS和JavaScript來(lái)構(gòu)建跨平臺(tái)桌面應(yīng)用程序的一個(gè)開源庫(kù)。 Electron通過(guò)將Chromium和Node.js合并到同一個(gè)運(yùn)行時(shí)環(huán)境中,并將其打包為Mac玷犹,Windows和Linux系統(tǒng)下的應(yīng)用來(lái)實(shí)現(xiàn)這一目的歹颓。

特點(diǎn):

  • 上手簡(jiǎn)單:只要會(huì)前端的知識(shí)就可以做桌面應(yīng)用
  • 跨平臺(tái):Mac,Linux领跛,Windows
  • 自動(dòng)更新

創(chuàng)建項(xiàng)目

全局安裝 electron

npm install -g electron  
// 推薦使用 cnpm 進(jìn)行安裝 
cnpm install -g electron 

創(chuàng)建項(xiàng)目的三種方式

通過(guò) git 克隆項(xiàng)目

  1. 克隆這倉(cāng)庫(kù)
git clone https://github.com/electron/electron-quick-start
  1. 進(jìn)入倉(cāng)庫(kù)
cd electron-quick-start
  1. 安裝依賴庫(kù)
npm install
  1. 運(yùn)行應(yīng)用
npm start

通過(guò) electron-forge 創(chuàng)建項(xiàng)目

electron-forge 相當(dāng)于 electron 的一個(gè)腳手架吠昭,可以讓我們更方便的創(chuàng)建矢棚、運(yùn)行和打包 electron 項(xiàng)目府喳。

  1. 全局安裝 electron-forge
npm install -g electron-forge
  1. 創(chuàng)建項(xiàng)目
electron-forge init my-app
  1. 進(jìn)入項(xiàng)目文件
cd my-app
  1. 運(yùn)行項(xiàng)目
npm start

手動(dòng)創(chuàng)建項(xiàng)目

  1. 新建一個(gè)文件夾
  2. 新建一個(gè) index.html 和 index.js
  3. npm init 生成一個(gè) package.json, 注意的是 package.json 里面配置的 main 必須是入口 js (主進(jìn)程)
  4. 執(zhí)行 electron . 運(yùn)行項(xiàng)目
// main.js 主進(jìn)程文件
const electron = require('electron')

const app = electron.app

const BrowserWindow = electron.BrowserWindow

const path = require("path")

// 變量 保存對(duì)應(yīng)窗口的引用
let mainWindow;

app.on('ready', function() {
  // 創(chuàng)建 BrowserWindow 的實(shí)例钝满,賦值給 mainWindow 打開窗口

  // 軟件默認(rèn)打開的寬度和高度 { width: 800, height: 600 }
  mainWindow = new BrowserWindow({ 
    width: 800, 
    height: 600,
    webPreferences: {
      // 重要:該屬性讓渲染進(jìn)程也擁有使用 node 的能力
      nodeIntegration: true
    }
  })

  // 開啟渲染進(jìn)程中的調(diào)試模式
  mainWindow.webContents.openDevTools()

  // 把 index.html 加載到窗口里面
  // mainWindow.loadFile('index.html')
  mainWindow.loadURL(path.join('file:', __dirname, 'index.html'))

  mainWindow.on('closed', () => {
    mainWindow = null
  })
}) 

Electron 主進(jìn)程和渲染進(jìn)程

主進(jìn)程里面可以直接拿到的東西耕腾,在渲染進(jìn)程中需從 remote 中獲取

// 例如:需要獲取到 net
// 主進(jìn)程
const { new } = require("electron")
// 渲染進(jìn)程
const { new } = require("electron").remote

Electron 運(yùn)行 package.json 的 main 腳本的進(jìn)程被稱為主進(jìn)程距糖。在主進(jìn)程中運(yùn)行的腳本通過(guò)創(chuàng)建 web 頁(yè)面來(lái)展示用戶界面悍引。一個(gè) Electron 應(yīng)用總是有且只有一個(gè)主進(jìn)程趣斤。

由于 Electron 使用了 chromium(谷歌瀏覽器)來(lái)展示 web 頁(yè)面,所以 Chromium 的多進(jìn)程架構(gòu)也被使用到了浓领,每個(gè) Electron 中的 web 頁(yè)面運(yù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)程:進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng)懂扼,是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位阀湿,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)品嚣。
線程:在一個(gè)程序里的一個(gè)執(zhí)行路程就叫做線程(thread)。更準(zhǔn)確的定義是:線程是 “一個(gè)進(jìn)程內(nèi)部的控制序列”罩旋。

Electron 渲染進(jìn)程中通過(guò) Node.js 讀取本地文件

在普通的瀏覽器中涨醋,web 頁(yè)面通常在一個(gè)沙盒環(huán)境中運(yùn)行浴骂,不被允許去接觸原生的資源宪潮。然而 Electron 的用戶在 Node.js 的 API 支持下可以在頁(yè)面中和操作系統(tǒng)進(jìn)行一些底層交互。

Node.js 在主進(jìn)程和渲染進(jìn)程中都可以使用梯轻。渲染進(jìn)程因?yàn)榘踩拗圃簦荒苤苯硬僮髟?GUI。雖然如此单绑,因此集成了 Node.js搂橙,渲染進(jìn)程也有了操作系統(tǒng)底層 API 的能力,Node.js 中常用的 path份氧、fs弯屈、crypto 等模塊在 Electron 可以直接使用资厉,方便我們處理鏈接蔬顾、路徑诀豁、文件、MD5等娩践,同時(shí) npm 還有成千上萬(wàn)的模塊供我們選擇翻伺。

const fs = require('fs')
const content = document.getElementById('content')
const button = document.getElementById('button')
button.addEventListener('click', (e) => {
  fs.readFile('package.json', 'utf8', (e) => {
    content.textContent = data;
  })
})

常用事件

app 常用事件

  • ready:當(dāng) Electron 完成初始化時(shí)被觸發(fā)
  • window-all-closed:所有窗口被關(guān)閉時(shí)觸發(fā)
  • before-quit:在應(yīng)用程序開始關(guān)閉窗口之前觸發(fā)
  • will-quit:當(dāng)所有窗口都已經(jīng)關(guān)閉并且應(yīng)用程序?qū)⑼顺鰰r(shí)觸發(fā)
  • quit:在應(yīng)用程序退出時(shí)觸發(fā)

webContent 常用事件

  • did-finish-load:導(dǎo)航完成時(shí)觸發(fā)吨岭,即選項(xiàng)卡的旋轉(zhuǎn)器將停止旋轉(zhuǎn)峦树,并派發(fā) onload 事件后魁巩。
  • dom-ready:一個(gè)框架中的文本加載完成后觸發(fā)該事件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末化戳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扫尖,更是在濱河造成了極大的恐慌掠廓,老刑警劉巖蟀瞧,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悦污,死亡現(xiàn)場(chǎng)離奇詭異切端,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)昌屉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門间驮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)马昨,“玉大人,你說(shuō)我怎么就攤上這事抢呆”埃” “怎么了恳邀?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵谣沸,是天一觀的道長(zhǎng)乳附。 經(jīng)常有香客問(wèn)我,道長(zhǎng)阱缓,這世上最難降的妖魔是什么举农? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任航背,我火速辦了婚禮棱貌,結(jié)果婚禮上婚脱,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好咏删,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布嘀粱。 她就那樣靜靜地躺著辰狡,像睡著了一般锋叨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛篇,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天娃磺,我揣著相機(jī)與錄音,去河邊找鬼叫倍。 笑死偷卧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吆倦。 我是一名探鬼主播听诸,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚕泽!你這毒婦竟也來(lái)了晌梨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泛领,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后篓像,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒穴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辰晕。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唱较,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汉形,到底是詐尸還是另有隱情逗威,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布嫉柴,位于F島的核電站计螺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呐萨,春花似錦、人聲如沸惨远。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間单刁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工卡儒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親颠黎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子文判,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容