electron快速入門筆記

本文將通過hello word案例收苏,來記錄學習electron的過程。
注:我的環(huán)境是 macOS Sierra,不涉及windows平臺,請確保已安裝node.js

electron 簡介


electron是一款可以使用JavaScript,HTML,CSS來構建跨平臺app的開源框架谎亩。

electron 官方入門demo


如果你想嘗試一下electron,那么使用electron-quick-start是一個很好的選擇歧匈。

# Clone the Quick Start repository  克隆項目到本地
git clone https://github.com/electron/electron-quick-start

# Go into the repository 進入項目根目錄
cd electron-quick-start

# Install the dependencies and run 安裝依賴并運行
npm install && npm start

如果你以為這樣就成功了,那你好天真啊纸泄,但是事情不可能如此簡單...

錯誤一

卡住了ing...

解決過程

運行到node install.js卡住了基公,長時間沒有反應,該怎么辦呢宋欺?我們應該找找原因轰豆。

  • 首先執(zhí)行rm -rf node_modules,將node_modules文件夾刪除
  • 執(zhí)行npm install -verbose胰伍,在安裝依賴過程中顯示的信息將更為詳細
    詳細信息

現在知道原因了,因為網速太慢了!!! (我當前有使用VPN酸休,如果網速快骂租,也很快就可以安裝完依賴;但是VPN速度不穩(wěn)定斑司,這個放在最下面講...)
大家知道由于某些原因渗饮,網絡是被墻掉的,而electron的源地址是在國外宿刮,所以建議使用淘寶鏡像互站。

  • 執(zhí)行npm install -g cnpm --registry=https://registry.npm.taobao.org ,安裝cnpm工具
  • 執(zhí)行cnpm install,要記得先刪除node_modules文件夾
淘寶鏡像
  • 最后執(zhí)行npm start,app將自行啟動
    我的執(zhí)行結果如下僵缺,
命令窗口
啟動成功ing
這里可能會有一個小問題

如果出現如下錯誤提示胡桃,表明找不到electron命令,只要全局安裝electron即可磕潮,命令npm install electron -g

找不到electron命令ing

項目結構分析

electron項目主要由3部分組成:

  • main.js
  • index.html
  • package.json
package.json

其中main.js的名稱不是固定的翠胰,你可以任意定義,但是千萬記得在package.json中寫相同的名字自脯,否則無法啟動app之景。

  "main": "main.js"   

如果main字段沒有聲明,則會優(yōu)先加載index.js

main.js

main.js用于創(chuàng)建窗口和處理系統(tǒng)事件膏潮。

// 引用electron依賴
const electron = require('electron')
// Module to control application life.  創(chuàng)建應用實例
const app = electron.app
// Module to create native browser window.      引用原生瀏覽器窗口锻狗,用于創(chuàng)建和控制瀏覽器窗口
const BrowserWindow = electron.BrowserWindow

const path = require('path')
const url = require('url')

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
// 保存一個對于window對象的全局引用,如果你不這樣做戏罢,當JavaScript對象被垃圾回收屋谭,window對象將關閉。
let mainWindow

function createWindow () {
  // Create the browser window.  創(chuàng)建瀏覽器窗口龟糕,并設置寬高 
  mainWindow = new BrowserWindow({width: 800, height: 600})

  // and load the index.html of the app.    加載應用的index.html
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }))

  // Open the DevTools.   打開開發(fā)者工具  
  mainWindow.webContents.openDevTools()

  // Emitted when the window is closed.      當窗口被關閉時桐磁,觸發(fā)這個事件
  mainWindow.on('closed', function () {
    // Dereference the window object, usually you would store windows     
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.

    // 取消引用window對象,如果你的應用支持多窗口的話讲岁,通常
    //  會把多個window對象存放在一個數組里面我擂,與此同時,你應該刪除相應的元素缓艳。
    mainWindow = null
  })
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.

// electron會在初始化后校摩,準備創(chuàng)建瀏覽器窗口時調用這個函數,
// 部分API在 ready事件出發(fā)后才能使用
app.on('ready', createWindow)

// Quit when all windows are closed.   當所有窗口關閉時推出  
app.on('window-all-closed', function () {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', function () {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.

  if (mainWindow === null) {
    createWindow()
  }
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

index.html

該文件是需要展示的內容阶淘。

自己寫hello word


在了解了以上內容之后衙吩,相信大家對electron已經有了一些了解,下面我們來動手寫一個hello word.

新建項目
# 新建文件夾  
mkdir hello_electron  
# 項目初始化  
npm init  
配置package.json

在package.json中添加main字段溪窒,用于指定electron app的入口文件

"main": 'index.js'

添加script命令 ,用于啟動electron app

"scripts": {
    "start": "electron ."
  },
安裝electron
# 進入項目根目錄
cd hello_electron
#安裝electron
npm install electron --save 
# 網絡有問題的同學請使用淘寶鏡像
cnpm install electron --save
建立index.html

和普通的html一樣坤塞,我們寫個簡單的標簽

<h1>hello world</h1>
建立index.js

先寫一個簡化版的例子冯勉。

// 引入electron模塊  
const electron = require('electron');

// 用來控制應用的生命周期  
const app = electron.app;

// 用來創(chuàng)建瀏覽器窗口  
const BrowserWindow = electron.BrowserWindow;

// 創(chuàng)建一個全局變量,名字任意摹芙,相當于普通網頁的window對象  
let mainWindow;

// 創(chuàng)建瀏覽器窗口函數
function createWindow() {
   // 創(chuàng)建瀏覽器窗口
  mainWindow = new BrowserWindow({
    width:500,
    height:800
  })
//加載項目目錄下的index.html
mainWindow.loadURL('file://' + __dirname + '/index.html');
// 當窗口被關閉時調用
mainWindow.on('closed', function () {
  // 取消引用window對象灼狰,如果你的應用支持多窗口的話,通常
  //  會把多個window對象存放在一個數組里面浮禾,與此同時交胚,你應該刪除相應的元素。
   mainWindow = null
 })
}
// 當應用觸發(fā) ready 事件后盈电,創(chuàng)建瀏覽器窗口
app.on('ready',function(){
 createWindow();
})

此時蝴簇,執(zhí)行npm start,將會打開hellow_electron。

到這里挣轨,已經算是小功告成了军熏;但是你會發(fā)現當關閉app后,直接退出了卷扮,dock欄里面的electron圖標也不見了荡澎。想要再次打開,還要去命令行跑一次晤锹。

因為現在的index.js是最簡易的摩幔,只是創(chuàng)建了一個窗口。現在添加如下代碼

 // 當點擊關閉時鞭铆,在dock中保留electron
  app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
// 點擊dock中的electron圖標的時候或衡,再次創(chuàng)建窗口
app.on('activate', function () {
  if (mainWindow === null) {
    createWindow()
  }
})

再次運行,你會發(fā)現當關閉窗口時车遂,dock中還保留著electron的icon,并且點擊可以再次打開封断。

打包


  • 安裝electron-package
npm install electron-packager --save-dev
  • 添加scrip命令 ,用于打包electron app。

    這里只配置的平臺為darwin舶担,即OSX系統(tǒng)坡疼;arch為x64。

"scripts": {
    "start": "electron ."衣陶,
    "build": "electron-packager .  hello_electron --platform=darwin --arch=x64 --ignore=node_modules/electron-*",
  },

electron-packager命令格式

electron-packager 項目目錄 app名稱 --platform=平臺 --arch=架構 --ignore=要忽略的目錄或文件
  • arch
    ia32 柄瑰, x64 , armv7l 剪况, all

  • plateform
    linux 教沾, win32 , darwin 译断, mas 授翻, all

    OS X (also known as darwin)
    Mac App Store (also known as mas)

執(zhí)行命令npm run build,將得到如下結果

安裝過程中會下載相關的平臺依賴,所以請耐心等待...

npm run build
項目文件目錄

helle_electron就是打包后生成的electron app。
這里有個不起眼的問題堪唐,hello_electron-darwin-x64這個文件夾無法使用鼠標刪除隆箩,每次移到廢紙簍之前都會讓輸入用戶密碼,但是輸完密碼又不會移到廢紙簍羔杨。可使用命令rm -rf hello_electron-darwin-x64進行強制刪除杨蛋,如果提示文件件不是空目錄兜材,就先刪掉文件夾里面的文件。

壓縮源碼


雖然生成app了逞力,但是源碼仍然是暴露的曙寡,當用戶打開app的包內容,進入目錄hellow_electron/Contents/Resources/app寇荧,將看到源代碼文件举庶。

顯示包內容

源代碼

為避免源代碼泄露,可對源碼進行壓縮揩抡。

  • 安裝electron-asar
npm install electron-asar --save-dev
  • 添加scrip命令 ,用于壓縮源代碼户侥。
"scripts": {
    "start": "electron .",
    "build": "electron-packager .  hello_electron --platform=darwin --arch=x64 --ignore=node_modules/electron-*",
    "package":"asar pack hello_electron-darwin-x64/hello_electron.app/Contents/Resources/app hello_electron-darwin-x64/hello_electron.app/Contents/Resources/app.asar"
  },

asar 命令格式

asar pack <dir> <output>

執(zhí)行npm run package將得到app.asar文件峦嗤,此時可將app文件刪除蕊唐。

asar文件

參考



如果喜歡,請點個贊_

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末烁设,一起剝皮案震驚了整個濱河市替梨,隨后出現的幾起案子,更是在濱河造成了極大的恐慌装黑,老刑警劉巖副瀑,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異恋谭,居然都是意外死亡糠睡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門箕别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铜幽,“玉大人,你說我怎么就攤上這事串稀〕祝” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵母截,是天一觀的道長到忽。 經常有香客問我,道長,這世上最難降的妖魔是什么喘漏? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任护蝶,我火速辦了婚禮,結果婚禮上翩迈,老公的妹妹穿的比我還像新娘持灰。我一直安慰自己,他們只是感情好负饲,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布堤魁。 她就那樣靜靜地躺著,像睡著了一般返十。 火紅的嫁衣襯著肌膚如雪妥泉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天洞坑,我揣著相機與錄音盲链,去河邊找鬼。 笑死迟杂,一個胖子當著我的面吹牛刽沾,可吹牛的內容都是我干的。 我是一名探鬼主播排拷,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼悠轩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了攻泼?” 一聲冷哼從身側響起火架,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忙菠,沒想到半個月后何鸡,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡牛欢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年骡男,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傍睹。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡隔盛,死狀恐怖,靈堂內的尸體忽然破棺而出拾稳,到底是詐尸還是另有隱情吮炕,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布访得,位于F島的核電站龙亲,受9級特大地震影響陕凹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜鳄炉,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一杜耙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拂盯,春花似錦佑女、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至榕订,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜕便,已是汗流浹背劫恒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轿腺,地道東北人两嘴。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像族壳,于是被迫代替她去往敵國和親憔辫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容