Electron入門

簡(jiǎn)介

https://electronjs.org/
一個(gè)平臺(tái),可以開發(fā)跨平臺(tái)桌面應(yīng)用
核心思想:希望通過一套代碼在不同平臺(tái)打包成不同平臺(tái)的桌面應(yīng)用程序

組成:
瀏覽器內(nèi)核(chrominu) + Node
(運(yùn)行Html+css+js) (運(yùn)行功能)

image.png

從官方示例electron-quick-start入門

git clone https://github.com/electron/electron-quick-start
npm install
npm start

1. package.json

image.png

以npm start啟動(dòng)應(yīng)用
入口文件 main.js

2.main.js

通過electron的API創(chuàng)建一個(gè)窗口載入我們寫好的HTML文件庆捺。主要負(fù)責(zé)創(chuàng)建BrowserWindow窗口背镇、啟動(dòng)其他配置文件和在窗口關(guān)閉之后清理進(jìn)程釋放資源的工作佛猛。在Main process中執(zhí)行

image.png
const {app, BrowserWindow} = require('electron');

Electron 在一開始會(huì)通過Node去執(zhí)行當(dāng)前main.js文件,electron模塊是electron平臺(tái)內(nèi)置的模塊,提供了所有API髓废;app這個(gè)模塊是用來控制整個(gè)應(yīng)用程序懒棉;BrowserWindow-瀏覽器窗口類型草描,可以用來創(chuàng)建一個(gè)瀏覽器窗口
這行代碼相當(dāng)于:

const electron = require('electron;); 
const app = electron.app; 
const BrowserWindow = electron.BrowserWindow;

  mainWindow = new BrowserWindow({width: 800, height: 600})

創(chuàng)建一個(gè)新的瀏覽器窗口。寬度為800策严,高度為600


  mainWindow.loadFile('index.html');

從應(yīng)用中加載index.html文件
還能寫成

// 裝載應(yīng)用的index.html頁(yè)面,__dirname為當(dāng)前文件路徑
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, "index.html"),
    protocol: 'file:',
    slashes: true
}));

mainWindow.webContents.openDevTools()

打開開發(fā)者工具


  // 當(dāng)窗口關(guān)閉時(shí)調(diào)用的方法
  mainWindow.on('closed', function () {
    // 解除窗口對(duì)象的引用穗慕,通常而言如果應(yīng)用支持多個(gè)窗口的話,你會(huì)在一個(gè)數(shù)組里
    // 存放窗口對(duì)象妻导,在窗口關(guān)閉的時(shí)候應(yīng)當(dāng)刪除相應(yīng)的元素逛绵。
    mainWindow = null
  })

// 當(dāng)Electron完成初始化并且已經(jīng)創(chuàng)建了瀏覽器窗口,則該方法將會(huì)被調(diào)用倔韭。
// 有些API只能在該事件發(fā)生后才能被使用暑脆。
app.on('ready', createWindow);

// 當(dāng)所有的窗口被關(guān)閉后退出應(yīng)用
app.on('window-all-closed', function() {
  // 對(duì)于OS X系統(tǒng),應(yīng)用和相應(yīng)的菜單欄會(huì)一直激活直到用戶通過Cmd + Q顯式退出
  if (process.platform !== 'darwin') {
    app.quit();
  }
});


app.on('activate', function() {
  // 對(duì)于OS X系統(tǒng)狐肢,當(dāng)dock圖標(biāo)被點(diǎn)擊后會(huì)重新創(chuàng)建一個(gè)app窗口添吗,并且不會(huì)有其他
  // 窗口打開
  if (win === null) {
    createWindow();
  }
});

3.index.html

image.png
<script>
      // You can also require other files to run in this process
      // 在Renderer process中執(zhí)行
      require('./renderer.js')
</script>

4.應(yīng)用打包

方法一:electron-packager
  • 1.安裝electron-packager
 npm install --save-dev electron-packager
    1. 打包
electron-packager . electron-demo --win --out ./publish --arch=x64 --electron-version=2.0.0

命令執(zhí)行完畢之后會(huì)在應(yīng)用的根目錄下生成publish文件夾,

image.png

electron-demo-win32-x64是打包好的文件份名,在里面找的可運(yùn)行的exe文件

image.png
  • 3.electron-packager命令參數(shù)說明
electron-packager <location of project> <name of project> <platform> <architecture> <electron version> <optional options>

electron-packager <應(yīng)用目錄> <應(yīng)用名稱> <打包平臺(tái)> --out <輸出目錄> <架構(gòu)> <electron版本><可選選項(xiàng)>
  • location of project:項(xiàng)目所在路徑
  • name of project:打包的項(xiàng)目名字
  • platform:確定了你要構(gòu)建哪個(gè)平臺(tái)的應(yīng)用(Windows碟联、Mac 還是 Linux)
  • architecture:決定了使用 x86 還是 x64 還是兩個(gè)架構(gòu)都用
  • electron version:electron 的版本
  • optional options:可選選項(xiàng)
  • 4.為使用便利妓美,可在package.json中配置打包命令
image.png

然后在命令行直接執(zhí)行

npm run packager

特點(diǎn):

  1. 支持平臺(tái)有:Windows (32/64 bit)、OS X (also known as macOS)鲤孵、Linux (x86/x86_64);
  2. 進(jìn)行應(yīng)用更新時(shí)壶栋,使用electron內(nèi)置的autoUpdate進(jìn)行更新
  3. 支持CLI和JS API兩種使用方式;
方法二:electron-builder

簡(jiǎn)單的說普监,electron-builder就是有比electron-packager有更豐富的的功能贵试,支持更多的平臺(tái),同時(shí)也支持了自動(dòng)更新凯正。除了這幾點(diǎn)之外毙玻,由electron-builder打出的包更為輕量,并且可以打包出不暴露源碼的setup安裝程序廊散。

  • 1.安裝electron-builder
npm install electron-builder --save-dev

(官方強(qiáng)烈推薦使用yarn安裝:yarn add electron-builder --save-dev)

  • 2.在package.json中的scripts中添加如下配置
 "dist": "electron-builder --win --x64"
  • 3.在命令行中執(zhí)行npm run dist
image.png

特點(diǎn):

  1. electron-builder 可以打包成msi桑滩、exe、dmg文件允睹,macOS系統(tǒng)运准,只能打包dmg文件,window系統(tǒng)才能打包exe缭受,msi文件胁澳;
  2. 幾乎支持了所有平臺(tái)的所有格式;
  3. 支持Auto Update米者;
  4. 支持CLI和JS API兩種使用方式韭畸;

5.版本更新(TODO)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市塘雳,隨后出現(xiàn)的幾起案子陆盘,更是在濱河造成了極大的恐慌普筹,老刑警劉巖败明,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異太防,居然都是意外死亡妻顶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蜒车,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讳嘱,“玉大人,你說我怎么就攤上這事酿愧×ぬ叮” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵嬉挡,是天一觀的道長(zhǎng)钝鸽。 經(jīng)常有香客問我汇恤,道長(zhǎng),這世上最難降的妖魔是什么拔恰? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任因谎,我火速辦了婚禮,結(jié)果婚禮上颜懊,老公的妹妹穿的比我還像新娘财岔。我一直安慰自己,他們只是感情好河爹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布匠璧。 她就那樣靜靜地躺著,像睡著了一般昌抠。 火紅的嫁衣襯著肌膚如雪患朱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天炊苫,我揣著相機(jī)與錄音裁厅,去河邊找鬼。 笑死侨艾,一個(gè)胖子當(dāng)著我的面吹牛执虹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唠梨,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼袋励,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了当叭?” 一聲冷哼從身側(cè)響起茬故,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚁鳖,沒想到半個(gè)月后磺芭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醉箕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年钾腺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讥裤。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡放棒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出己英,到底是詐尸還是另有隱情间螟,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站厢破,受9級(jí)特大地震影響邮府,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溉奕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一褂傀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧加勤,春花似錦仙辟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至戴尸,卻和暖如春粟焊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孙蒙。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工项棠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挎峦。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓香追,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坦胶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子透典,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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