如何用Web前端技術(shù)就能開發(fā)出桌面應(yīng)用程序?

Web前端技術(shù)開發(fā)桌面應(yīng)用的方式

CEF:用 Chromium&Webkit 來呈現(xiàn) web 頁面娱两,是客戶端里面嵌瀏覽器,瀏覽器里面跑網(wǎng)頁它掂。

heX:基于CEF簇秒,內(nèi)部整合了開源項目 Chromium 及 node.js

nw:基于Chromium 和 node.js擒悬,利用 web 方式開發(fā)跨平臺桌面應(yīng)用的平臺技術(shù)模她。

electron:底層也是基于Chromium 和 node.js。

等等懂牧。侈净。。

案例實操~electron

electron 是 github 開發(fā)的僧凤,用來開發(fā)桌面應(yīng)用的一款前端框架

開發(fā)環(huán)境

安裝 node.js

nodejs下載地址

為了避免網(wǎng)絡(luò)問題對 Node 工作時的影響畜侦,我們安裝國內(nèi)的 node 鏡像 cnpm。

npm install -g cnpm --registry=https://registry.npm.taobao.org

安裝 electron

npm install --save-dev electron

或者全局安裝

npm install -g electron

開發(fā)工具

VSCode

其實 vscode 就是 electron 開發(fā)的

開發(fā)一個簡易的 electron

Electron 應(yīng)用使用 JavaScript 開發(fā)躯保,其工作原理和方法與 Node.js 開發(fā)相同旋膳。 electron 模塊包含了 Electron 提供的所有 API 和功能,引入方法和普通 Node.js 模塊一樣:

constelectron=require('electron')

electron 模塊所提供的功能都是通過命名空間暴露出來的途事。 比如說: electron.app負責(zé)管理 Electron 應(yīng)用程序的生命周期溺忧, electron.BrowserWindow類負責(zé)創(chuàng)建窗口。下面是一個簡單的main.js文件盯孙,它將在應(yīng)用程序準備就緒后打開一個窗口:

const{app,BrowserWindow}=require('electron')

?

functioncreateWindow() {

// 創(chuàng)建瀏覽器窗口

letwin=newBrowserWindow({

width:800,

height:600,

webPreferences: {

nodeIntegration:true

?? }

? })

?

// 加載index.html文件

win.loadFile('index.html')

}

?

app.whenReady().then(createWindow)

創(chuàng)建你想展示的 index.html:

<!DOCTYPE html>

<html>

<head>

<metacharset="UTF-8">

<title>Hello World!</title>

<!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag -->

<metahttp-equiv="Content-Security-Policy"content="script-src 'self' 'unsafe-inline';"/>

</head>

<body>

<h1>Hello World!</h1>

We are using node<script>document.write(process.versions.node)</script>,

Chrome<script>document.write(process.versions.chrome)</script>,

and Electron<script>document.write(process.versions.electron)</script>.

</body>

</html>

啟動

我們在package.json中已經(jīng)寫好了啟動命令鲁森,所以這里直接用 node 啟動命令npm start就可以了,如果沒有配振惰,也可以用electron .命令啟動歌溉。

主進程和渲染進程

我們可以理解package.json中定義的入口文件就是主進程,那一般一個程序只有一個主進程骑晶,而我們可以利用一個主進程痛垛,打開多個子窗口。

由于 Electron 使用了 Chromium 來展示 web 頁面桶蛔,所以 Chromium 的多進程架構(gòu)也被使用到匙头。每個 Electron 中的 web 頁面運行在它自己的渲染進程中,也就是我們說的渲染進程仔雷。

也就是說主進程控制渲染進程蹂析,一個主進程可以控制多個渲染進程。

您應(yīng)當(dāng)在 main.js 中創(chuàng)建窗口碟婆,并處理程序中可能遇到的所有系統(tǒng)事件电抚。下面我們將完善上述例子,添加以下功能:打開開發(fā)者工具竖共、處理窗口關(guān)閉事件蝙叛、在 macOS 用戶點擊 dock 上圖標時重建窗口,添加后公给,main. js 就像下面這樣:

const{app,BrowserWindow}=require('electron')

?

functioncreateWindow() {

// 創(chuàng)建瀏覽器窗口

constwin=newBrowserWindow({

width:800,

height:600,

webPreferences: {

nodeIntegration:true

?? }

? })

?

// 并且為你的應(yīng)用加載index.html

win.loadFile('index.html')

?

// 打開開發(fā)者工具

win.webContents.openDevTools()

}

?

app.whenReady().then(createWindow)

?

// 當(dāng)所有窗口都關(guān)閉時觸發(fā)此事件.

app.on('window-all-closed', ()=>{

// 在 macOS 上借帘,除非用戶用 Cmd + Q 確定地退出蜘渣,

// 否則絕大部分應(yīng)用及其菜單欄會保持激活。

if(process.platform!=='darwin') {

app.quit()

? }

})

?

app.on('activate', ()=>{

// 在macOS上肺然,當(dāng)單擊dock圖標并且沒有其他窗口打開時蔫缸,

// 通常在應(yīng)用程序中重新創(chuàng)建一個窗口。

if(BrowserWindow.getAllWindows().length===0) {

createWindow()

? }

})

?

// In this file you can include the rest of your app's specific main process

// code. 也可以拆分成幾個文件狰挡,然后用 require 導(dǎo)入捂龄。

?

git 上面的 demo 示例

# 克隆這倉庫

gitclone https://github.com/electron/electron-quick-start

# 進入倉庫

cdelectron-quick-start

# 安裝依賴庫

npminstall

# 運行應(yīng)用

npmstart

electron-forge 構(gòu)建項目

# 全局安裝electron-forge

npminstall electron-forge-g

?

#用electron-forge初始化一個項目

electron-forge init demo02

?

# 進入到項目目錄

cddemo02

?

#啟動項目

npmstart

擴展~開發(fā)桌面百度

主進程代碼

我們創(chuàng)建了主進程對象 win 后释涛,讓它直接加載百度的地址加叁。

const{app,BrowserWindow}=require('electron')

?

functioncreateWindow() {

// 創(chuàng)建瀏覽器窗口

letwin=newBrowserWindow({

width:800,

height:800,

webPreferences: {

nodeIntegration:true

?? }

? })

?

// 加載index.html文件

// ? win.loadFile('index.html')

win.loadURL("http://www.baidu.com")

}

?

app.whenReady().then(createWindow)

打包發(fā)布

我們希望使用electron-packager對應(yīng)用進行打包發(fā)布,electron-packager的安裝方式如下:

#下載electron-packager打包插件

npminstall electron-packager-g

#開始打包

electron-packager ./ demo01--win--out./--arch=x64--app-version=0.0.1--electron-version=8.2.5

我們還可以進一步打包成可執(zhí)行文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唇撬,一起剝皮案震驚了整個濱河市它匕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窖认,老刑警劉巖豫柬,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扑浸,居然都是意外死亡烧给,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門喝噪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來础嫡,“玉大人,你說我怎么就攤上這事酝惧×穸Γ” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵晚唇,是天一觀的道長巫财。 經(jīng)常有香客問我,道長哩陕,這世上最難降的妖魔是什么平项? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮悍及,結(jié)果婚禮上葵礼,老公的妹妹穿的比我還像新娘。我一直安慰自己并鸵,他們只是感情好鸳粉,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著园担,像睡著了一般届谈。 火紅的嫁衣襯著肌膚如雪枯夜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天艰山,我揣著相機與錄音湖雹,去河邊找鬼。 笑死曙搬,一個胖子當(dāng)著我的面吹牛摔吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纵装,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼征讲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了橡娄?” 一聲冷哼從身側(cè)響起诗箍,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挽唉,沒想到半個月后滤祖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瓶籽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年匠童,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塑顺。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡汤求,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茬暇,到底是詐尸還是另有隱情首昔,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布糙俗,位于F島的核電站勒奇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巧骚。R本人自食惡果不足惜赊颠,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劈彪。 院中可真熱鬧竣蹦,春花似錦、人聲如沸沧奴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纲菌,卻和暖如春挠日,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翰舌。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工嚣潜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椅贱。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓懂算,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庇麦。 傳聞我的和親對象是個殘疾皇子计技,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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