electron

一:前世今生

Electron-----------------小名 Atom Shell

按照字面意思來說滤蝠,electron直譯為 “電子”揪漩,是 GitHub開發(fā) Atom 編輯器時(shí)配套開發(fā)的技術(shù)框架,現(xiàn)在已經(jīng)成為一款專業(yè)的利用 Web 前端技術(shù)去開發(fā)一個(gè)桌面的客戶端產(chǎn)品開發(fā)框架舵稠。

部分產(chǎn)品.png

二:這個(gè)東西網(wǎng)站也可以為什么需要客戶端词渤?

既然 Electron 是用 Web 技術(shù)寫客戶端,那么看上去 Electron 要做的事瓷翻,可以搬到網(wǎng)站上,為什么還要搬到客戶端,這里有3個(gè)角度的回答:

  • 用戶角度: 客戶端是一款獨(dú)立的軟件逻悠,其綜合體驗(yàn)一般都是比網(wǎng)站高的元践,尤其是涉及到「工具」范疇的應(yīng)用,此外童谒,特定的用戶群體也會(huì)有類似的使用習(xí)慣
  • 發(fā)行方角度: 客戶端是另一種產(chǎn)品形式,是一種產(chǎn)品的分發(fā)方式和入口沪羔,客戶端可以實(shí)現(xiàn)很多 本地應(yīng)用獨(dú)有的需求去觸達(dá)用戶饥伊,也能提供更加可靠的服務(wù)
  • 開發(fā)角度: 終于.......不用考慮瀏覽器兼容了,對(duì)于開發(fā)來說蔫饰,終于跳出了瀏覽器的沙盒琅豆,你可以自己去控制 Electron 中的「瀏覽器」,莫名的開心篓吁,開發(fā)麻煩小茫因,功能更強(qiáng)大,脫發(fā)少

三:背后的男人和女人

它是建立在「Chromium」和「Node」之上的杖剪,Chromium負(fù)責(zé)界面冻押,它能夠滿足你使用出先進(jìn)的css以及js特性,Node負(fù)責(zé)背后的邏輯盛嘿,Node 這個(gè)大生態(tài)下的模塊洛巢,Electron 也都可以用,這減少了很多造輪子的時(shí)間次兆,這就是典型的「你負(fù)責(zé)貌美如花稿茉,我負(fù)責(zé)賺錢養(yǎng)家」。
而對(duì)于前端開發(fā)來說芥炭,「不要和老夫說什么 C++漓库,Java,老夫行走江湖就一把 JS园蝠,遇到需求就是干」渺蒿。前端開發(fā)可以用自己熟悉的方式去寫應(yīng)用界面,邏輯部分也還是 JS砰琢,如果你精通 Node 后端蘸嘶,那后端也可以插一腳,「鳥槍換大炮」陪汽,你開發(fā)客戶端的能力有一種「忽如一夜春風(fēng)來」的感覺训唱。

四:技術(shù)實(shí)現(xiàn)

理解 Electron 最重要應(yīng)該就是理解主進(jìn)程(Main Process)和渲染進(jìn)程(Render Process)了。理解了這兩者挚冤,其他內(nèi)容花費(fèi)些時(shí)間查查API文檔即可况增。主進(jìn)程連接著操作系統(tǒng)和渲染進(jìn)程,可以把它看做頁面和計(jì)算機(jī)溝通的橋梁训挡。渲染進(jìn)程就是我們所熟悉前端環(huán)境了澳骤。只是載體改變了歧强,從瀏覽器變成了window。傳統(tǒng)的web環(huán)境我們是不能對(duì)用戶的系統(tǒng)就行操作的为肮。而electron相當(dāng)于node環(huán)境摊册,我們可以在項(xiàng)目里使用所有的node api 。官方地址颊艳,Electron 并不是很復(fù)雜茅特,在寫完不多的主進(jìn)程代碼后,其他的業(yè)務(wù)代碼幾乎和 Web 應(yīng)用沒什么區(qū)別棋枕。

簡單理解:

  • web項(xiàng)目套上一個(gè)node環(huán)境的殼
  • 相比web項(xiàng)目白修,桌面項(xiàng)目多了一個(gè)進(jìn)程

五:Electron的對(duì)手NW.js

NW和Electron框架的優(yōu)劣眾說紛紜,由于作者的水平有限重斑,不作說明兵睛。從開發(fā)角度來說,選擇用 nw.js 還是 election 窥浪,區(qū)別其實(shí)不是很大祖很。倆著的開發(fā)工作還是在自己的 前端交互邏輯上面。倆著的APP都會(huì)跑兩部分的js runtime寒矿,分別是node-runtime和chromium-runtime突琳。

NW.js(node-webkit)* : NW比electron生的早,誕生于微軟符相,有很多的知名桌面應(yīng)用都是基于NW拆融,比如微信的開發(fā)者工具,釘釘桌面版啊终,微信小程序IDE等等镜豹。基于NW的應(yīng)用入口是index.html蓝牲,NW.js將自己的功能都整合進(jìn)了chromium-runtime趟脂,因此更接近一個(gè)前端的應(yīng)用開發(fā)方式,像一個(gè)跑在node-platform上的瀏覽器例衍。
其實(shí)NW的electron和NW.js主要代碼貢獻(xiàn)者和維護(hù)者都是同一個(gè)人昔期,他在微軟實(shí)習(xí)的時(shí)候的對(duì)NW做出的代碼貢獻(xiàn),而后來轉(zhuǎn)職進(jìn)入GitHub之后對(duì)electron做出代碼貢獻(xiàn)佛玄。我們拋去關(guān)于NW這部分插曲不說硼一,NW和electron之間的相互聯(lián)系其實(shí)還是很緊密,畢竟主要維護(hù)者都是同一人梦抢。

六:快速開始electron

官方快速開始

七:搭一個(gè)架子

這個(gè)架子主要包括加入技術(shù)React+Redux+Antd般贼,然后自定義標(biāo)題欄,
1.React創(chuàng)建一個(gè)項(xiàng)目其實(shí)很繁瑣,因?yàn)樗昧薐SX哼蛆,所以需要配置Babel蕊梧、webpack or Browserify

不過好在官方提供了一個(gè)工具 Create React App,可以非常簡單快速的創(chuàng)建React 項(xiàng)目腮介,并且提供了熱調(diào)試環(huán)境肥矢。詳細(xì)參考官方文檔

簡單的來說,Create React App 創(chuàng)建了一個(gè)React的項(xiàng)目模版叠洗、配置橄抹,并且提供了一些很方便的腳本命令用于調(diào)試和部署React前端程序。
整合Electron和React
Create React App創(chuàng)建的項(xiàng)目是一個(gè)純前端項(xiàng)目惕味,整合React項(xiàng)目和Electron并且保留熱調(diào)試和本地包引用需要以下幾個(gè)簡單的操作

需要在React項(xiàng)目的根目錄(不是src目錄)創(chuàng)建Electron的啟動(dòng)文件main.js(前文中有詳細(xì)內(nèi)容)
在React項(xiàng)目中的package.json文件中增加main字段,值為 "./main.js"
修改main.js 中的win.loadURL玉锌,改為

 win.loadURL(url.format({
    pathname: path.join(__dirname, './build/index.html'),
    protocol: 'file:',
    slashes: true
  }))

到目前為止名挥,在根目錄下運(yùn)行 electron .就可以啟動(dòng)React創(chuàng)建的桌面應(yīng)用了。

但是還有幾個(gè)問題

資源文件顯示不出來主守,在調(diào)試面板出現(xiàn)找不到文件的錯(cuò)誤提示
每次都要 npm run build 后才能看到修改項(xiàng)
無法獲得系統(tǒng)包禀倔,例如用 os.cpus()無法得到系統(tǒng)cpus信息。

注意的幾點(diǎn)

默認(rèn)情況下参淫,homepage是 http://localhost:3000 ,build后救湖,所有資源文件路徑都是/static,而Electron調(diào)用的入口是以file:協(xié)議涎才,/staitc就會(huì)定位到系統(tǒng)的根目錄去鞋既,所以找不到靜態(tài)文件。在package.json文件中添加homepage字段并設(shè)置為"."后耍铜,靜態(tài)文件的路徑就變成了相對(duì)路徑邑闺,就能正確的找到了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棕兼,一起剝皮案震驚了整個(gè)濱河市陡舅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伴挚,老刑警劉巖靶衍,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茎芋,居然都是意外死亡颅眶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門败徊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帚呼,“玉大人,你說我怎么就攤上這事∶荷保” “怎么了眷蜈?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沈自。 經(jīng)常有香客問我酌儒,道長,這世上最難降的妖魔是什么枯途? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任忌怎,我火速辦了婚禮,結(jié)果婚禮上酪夷,老公的妹妹穿的比我還像新娘榴啸。我一直安慰自己,他們只是感情好晚岭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布鸥印。 她就那樣靜靜地躺著,像睡著了一般坦报。 火紅的嫁衣襯著肌膚如雪库说。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天片择,我揣著相機(jī)與錄音潜的,去河邊找鬼。 笑死字管,一個(gè)胖子當(dāng)著我的面吹牛啰挪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纤掸,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼脐供,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了借跪?” 一聲冷哼從身側(cè)響起政己,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掏愁,沒想到半個(gè)月后歇由,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡果港,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年沦泌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛掠。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谢谦,死狀恐怖释牺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情回挽,我是刑警寧澤没咙,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站千劈,受9級(jí)特大地震影響祭刚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墙牌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一涡驮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喜滨,春花似錦捉捅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焰情,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剥懒,已是汗流浹背内舟。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留初橘,地道東北人验游。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像保檐,于是被迫代替她去往敵國和親耕蝉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353