electron入門心得

前言

前端開發(fā)桌面程序這個概念已經(jīng)出現(xiàn)有一段時間了刻帚,這項技術(shù)也已經(jīng)走向成熟鲫构,Github上nw和光electron的star就差不多有10w顆星了卿泽,github也衍生出了很多開源的桌面項目儼然成了一個熱門項目。既然這么熱紧憾,那就一個字:學(xué)到千。

本文主要幫助js基礎(chǔ)比較薄弱赴穗,又沒有接觸過electron的同學(xué)更好的學(xué)習(xí)electron,文中有什么不足之處或者錯誤般眉,歡迎指出。

electron

electron 安裝

npm命令安裝electron庫

npm install electron --save-dev --save-exact

傳送門:electron官方Github

如何快速上手electron

剛接觸一個新東西甸赃,難免一頭霧水柿汛,如果多看一點相關(guān)的文章勢必會有一個方向感埠对,去更好的上手新東西裁替。上手electron,官方提供了一個非常好的快速上手實例貌笨。

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

這個倉庫給我們初始化了一個electron項目弱判,結(jié)構(gòu)非常純凈,克隆下來你就可以直接改造成自己的項目锥惋。

electron API

官方api(英文) 官方docs

翻譯API(版本有偏差)翻譯版docs

國內(nèi)也有翻譯版的API文檔,但是不能保證是最新的剥哑,使用時一定要看好自己的版本和翻譯版。使用翻譯版API株婴。同時可以看看官方的更新日志暑认,看看有什么新功能困介。官方社區(qū)有很多有用的工具,開始學(xué)習(xí)欠務(wù)必了解蘸际,涉及到項目開發(fā)調(diào)試和項目構(gòu)建。這里推薦一個倉庫根穷,這個倉庫收錄了一些比較常用的API导坟,克隆后跑起來你就可以快速查看這些常用API

git clone https://github.com/fuchao2012/zh-cn-Electron-API-Demos
 cd zh-cn-Electron-API-Demos
 npm install
 npm start

electron項目和web項目的區(qū)別

electron核心我們可以分成2個部分屿良,主進(jìn)程和渲染進(jìn)程惫周。主進(jìn)程連接著操作系統(tǒng)和渲染進(jìn)程,可以把她看做頁面和計算機溝通的橋梁喷橙。渲染進(jìn)程就是我們所熟悉前端環(huán)境了。只是載體改變了贰逾,從瀏覽器變成了window菠秒。傳統(tǒng)的web環(huán)境我們是不能對用戶的系統(tǒng)就行操作的。而electron相當(dāng)于node環(huán)境,我們可以在項目里使用所有的node api 。

簡單理解:
給web項目套上一個node環(huán)境的殼酵熙。

項目結(jié)構(gòu)

相比web項目轧简,桌面項目多了一個進(jìn)程

項目遷移

如果要遷移項目到web端,就需要把項目中的electron提供的API和node的API完全剝離出來哮独,只能遺留web的代碼察藐,比如 node fs模塊,electron提供ipc 模塊分飞,都需要剝離。

如果你一開始就打算雙端程序讯檐,在開始寫代碼時應(yīng)該對web代碼和elecctron的代碼進(jìn)行分離染服,以便后期的遷移。

項目開發(fā)打包工具

這里推薦devtron 和 electron-builder 2個開發(fā)工具挖垛,配置簡單秉颗,功能強大。這里不詳細(xì)介紹工具的使用站宗。官方都有非常好的文檔。

傳送門: devtron

傳送門: electron-builder

社區(qū)還有很多好用的工具夷家,可以自行查閱敏释,選擇使用。

傳送門:community

ps: electron打包的時候需要下載一個版本庫义屏,速度會非常慢,可以通過淘寶鏡像源解決

>就是在你的命令前加ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/及空格

$ ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/ npm run build
打包問題

Electron介紹差不多就到這里闽铐,框架有了。然而一大堆配置頭都暈了踢星,從0-1非常困難隙咸,我們不妨從1到0,可以先找個模版做個小demo感受一下electron的魅力藏否,在做項目中學(xué)習(xí)electron充包。

傳送門: react模版 ????

傳送門: vue模版 ????

electron-vue經(jīng)驗分享

官方文檔中作者提供了很多對開發(fā)有用的東西,我推薦學(xué)習(xí)的同學(xué)都通讀一遍

傳送門: electron-vue文檔

electron-vue继薛,作者為我們封裝好了一個基于vue框架的腳手架愈捅,包括electron所有基本的開發(fā)構(gòu)建工具 和vue配套的請求,路由以及vuex等插件蓝谨。
通過腳手架我們可以直接進(jìn)入開發(fā)階段,開發(fā)的同時咖楣,去了解electron的工作機制芦昔,之后再開始深入去理解她更深層次的代碼邏輯。 先走形咕缎,再走心。

不遷移項目就可以打包雙版本的可行方案

作者并未提供web開發(fā)的支持焙蹭,但是提供了非常好的web打包支持嫂伞。
只要寫好邏輯我們可以不用遷移項目就可以打包桌面項目和web項目拯钻。

process.env.IS_WEB是暴露的一個全局變量撰豺,我們可以在渲染進(jìn)程中獲取,項目在electron環(huán)境下刊驴,返回false寡润。否則為true舅柜。于此,我們可以通過設(shè)置她的值來達(dá)到web dev的效果致份,也可以處理不同環(huán)境的不同邏輯,一些示例:

示例
示例2
示例3

打開新窗口的“最佳”做法

因為是webpack配置,入口只有index.html 滔蝉,所以打開新窗口,一般會再配置一個入口阳谍。其實還有一種更佳的做法螃概。

>>> 主進(jìn)程 定義好監(jiān)聽事件 
ipc.on('newPage', function(e) {
    const modalPath = process.env.NODE_ENV === 'development'
        ? 'http://localhost:9080/#/newPage'
        : `file://${__dirname}/index.html#newPage`
    let win = new BrowserWindow({
        width: 1024,
        height: 724,
        webPreferences: {
            webSecurity: false
        }
    })
    win.on('close', function() {
        win = null
    })
    win.loadURL(modalPath)

})

>>> router/index.js   定義路由
// import 你的新頁面  .vue 文件
 {
            path: '/newPage',
            name: 'newPage',
            component: newPage,  
        }

》》》配置完成 任意進(jìn)程調(diào)用ipc.send('newPage')   完美解決

頁面之間的數(shù)據(jù)共享問題

electron項目可以通過本地數(shù)據(jù)庫去做一個數(shù)據(jù)存儲,這樣你就可以在任何需要的地方調(diào)用這份數(shù)據(jù)训貌。我的做法:

1.首先選擇一個 本地數(shù)據(jù)庫插件 冒窍,我用的 nedb

>>> 新建db.js
import Datastore from 'nedb'
import path from 'path'
import { remote } from 'electron'

const db = {
    tableData: new Datastore({filename: path.join(remote.app.getPath('userData'), '/tableData.db')}),
    chartData: new Datastore({filename: path.join(remote.app.getPath('userData'), '/chartData.db')}),
    cfgData: new Datastore({filename: path.join(remote.app.getPath('userData'), '/cfgData.db')}),
}

export default {
    db
}

>>>>  引入數(shù)據(jù)庫
/**
 *  本地數(shù)據(jù)庫導(dǎo)入
 *  web模式注釋該代碼
 */
import db from '../db'
Vue.prototype.$db = db.db

>>>> 任意頁面調(diào)用數(shù)據(jù)庫
  this.$db.chartData.loadDatabase();
  this.$db.chartData.find({},  (err, docs)=> {
//                            console.log(docs);
                            if(docs && docs.length > 0){
                                this.totalOptionList = docs;
                            }
                        });

根據(jù)自己的習(xí)慣選擇數(shù)據(jù)庫,我自己對mongodb數(shù)據(jù)庫比較熟悉区拳,所以采用了nedb意乓。語法糖類似约素,基本直接拿來就能用,不需要再次學(xué)習(xí)笆凌。

后記

最后說一些可以幫助你更好學(xué)習(xí)electron的基礎(chǔ)知識:

webpack: 最強構(gòu)建工具,沒有之一送悔,了解webpack爪模,你才能更好編寫項目配置。

node: electron是搭載谷歌v8內(nèi)核的高性能的node環(huán)境 屋灌,所有node能用的東西,我們都能用祠丝。是不是很酸爽除嘹?

奉上一個demo項目,簡單的相冊程序尉咕。還有一個項目涉及公司,代碼就不好上了蟆肆,只能分享經(jīng)驗晦款。

傳送門: 相冊Github

如果覺得本文對你有所幫助炎功,就star一下吧~大傳送之術(shù)缓溅! 我的博客Github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坛怪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袜匿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭务,死亡現(xiàn)場離奇詭異,居然都是意外死亡柳沙,警方通過查閱死者的電腦和手機拌倍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來数初,“玉大人梗顺,你說我怎么就攤上這事〖允兀” “怎么了练般?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵薄料,是天一觀的道長。 經(jīng)常有香客問我摄职,道長,這世上最難降的妖魔是什么蛔垢? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任迫悠,我火速辦了婚禮,結(jié)果婚禮上创泄,老公的妹妹穿的比我還像新娘鞠抑。我一直安慰自己,他們只是感情好搁拙,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布法绵。 她就那樣靜靜地躺著端幼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪此熬。 梳的紋絲不亂的頭發(fā)上滑进,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音阴汇,去河邊找鬼节槐。 笑死,一個胖子當(dāng)著我的面吹牛铜异,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咆蒿,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蚂子,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒂破?” 一聲冷哼從身側(cè)響起别渔,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钠糊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艘刚,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡截珍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秋度。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡埠居,死狀恐怖事期,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绎橘,我是刑警寧澤唠倦,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站稠鼻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏靶瘸。R本人自食惡果不足惜毛肋,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一屋剑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唉匾,春花似錦、人聲如沸厂财。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肪康。三九已至撩穿,卻和暖如春谒撼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抵皱。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工茉帅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堪澎。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓樱蛤,卻偏偏與公主長得像藻三,于是被迫代替她去往敵國和親统捶。 傳聞我的和親對象是個殘疾皇子隙疚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 生無可戀歼疮, 死亦何妨哪痰。
    是1988的兔子閱讀 138評論 1 1
  • 鏡子 多少年了, 你總立在我客廳里頭晌杰, 你還是你, 沒有絲毫變胖變瘦抑诸。 你真好爹殊, 我的朋友蜕乡, 既不見青絲變白頭梗夸, ...
    阿超Lilian閱讀 344評論 0 0