摘要:如果第一次分發(fā)倒是沒啥問題,但是每次都這樣整個應(yīng)用讓運營手動更新,運營肯定不爽,必須得搞個自動更新方案出來。根據(jù)這樣的更新方案,項目的目錄結(jié)構(gòu)也得做一點改變,在我的項目下主要三個文件夾,,。
第一次開發(fā)Electron應(yīng)用 背景
由于工作內(nèi)容大多是一些日?;顒?,雖然活動都以已經(jīng)做好模板為主,實際并不需要什么開發(fā)量,一般都是調(diào)一下按鈕的位置、顏色、字體大小什么的就可以立即發(fā)布,但是運營覺得活動什么都要經(jīng)過開發(fā)才能發(fā)布,影響他們的運營效率(╮(╯▽╰)╭ ),開始下達開發(fā)指令:希望能夠模塊化,通過拖拉就可以生成一個活動(°(°ˊДˋ°) ° 大致可以理解為類型MAKA這樣生成H5的工具),好吧,么有交互,么有設(shè)計,給你這么大的空間,好好發(fā)揮,搞好加雞腿。╮(╯▽╰)╭一臉懵逼, 表示么有做過,得回去好好思考一下。。。
Electron大法好經(jīng)過一段時間深入思考(掙扎糾結(jié)良久,快吐血了),(╯▔^▔)╯覺得使用Electron搞能夠最大程度降低難度(本來也想做成后臺應(yīng)用的,但是我的直覺告訴我,怎么簡單怎么來),能用web技術(shù)開發(fā)(效率扛扛),能利用巨多的nodejs模塊(支持大大的好),能夠擺脫兼容性問題(只需兼容一個瀏覽器,是一個啊,聽著都幸福)。以上就是選擇Electron開發(fā)的原因。
如何更新既然要做成客戶端,更新是個大問題,如果整個應(yīng)用更新,基本開發(fā)完之后打包壓縮72M(沒有做任何優(yōu)化,依賴的包比較多,node_modules壓縮后也有20M),應(yīng)該算是很大的了。如果第一次分發(fā)倒是沒啥問題,但是每次都這樣整個應(yīng)用讓運營手動更新,運營肯定不爽,必須得搞個自動更新方案出來。
在Github看了一遍文檔,是有專門一節(jié)介紹自動更新的 傳送門,Electron團隊也很貼心,給了一系列的解決方案,只是感覺自己用不上那么高大上的技術(shù)(我只需要更簡單一點就可以了),好(╯▔^▔)╯,決定自己擼一套出來。
首先利用electron-packager,打包出來的Electron應(yīng)用(因為公司都是windows,只針對windows打包即可,但是打包過程也是相當(dāng)耗時,時間大多耗在復(fù)制node_modules文件夾),很容易就發(fā)現(xiàn)electron-packager生成其實就是一個模板,每次內(nèi)容改變就只是resources文件夾下面的內(nèi)容改變而已,如果我們不需要復(fù)制node_modules的文件夾的內(nèi)容,打包速度會提高很多(其實一般來說node_modules也不會經(jīng)常改變),開始設(shè)想把node_modules 和 src(代碼)分開打包,這樣以后更新的話,只更新src目錄也相當(dāng)快。
在看Electron文檔時,看到了Electron內(nèi)部是支持一種叫asar格式的文件,那asar到底是一種什么樣的格式呢,Github的官方介紹是這樣的:
Asar is a simple extensive archive format, it works like tar that concatenates all files together without compression, while having random access support.
可見這種文件格式只是簡單把文件整理到一起,并沒有壓縮,可以當(dāng)做它是一個文件夾來訪問里面的文件,還有很重要的一點,你只能讀取不能寫入。
有了這種文件格式就提供了一個思路,把node_modules 和 src 分別打包成node_modules.asar 和 src.asar,當(dāng)應(yīng)用啟動的時候直接require對應(yīng)src.asar文件,在src.asar里面的代碼再執(zhí)行創(chuàng)建窗口和加載頁面。
然后應(yīng)用更新也只更新node_modules.asar 和 src.asar這兩個文件,這樣的話,整體的更新粒度是縮小了,當(dāng)然你如果有更高的要求要做到那種更小粒度(針對代碼某個文件級別的更新)可能得再思考一下了,但是在我當(dāng)前的場景下是足夠用了。
還有一點小問題,src.asar里面的代碼怎么尋找到node_modules.asar里面的模塊尼,換句話說就是怎么把node_modules.asar放到模塊的查找路徑上,這里貼一下我所使用的方法:
require("module").globalPaths.unshift(require("path").join(process.cwd(), "resources/node_modules.asar"));
只要加到globalPaths上,且放到第一個(查找更快點)。
根據(jù)這樣的更新方案,項目的目錄結(jié)構(gòu)也得做一點改變,在我的項目下主要三個文件夾:app,node_modules,src。node_modules 和 src就不用多說,那現(xiàn)在的app目錄下的代碼到底要干些啥尼
1. 先檢查有沒有文件需要更新,如果有彈出更新窗口(代碼先請求一個manifest.json文件,里面有文件的MD5,用現(xiàn)有的文件做對比) 跳到2,沒有就跳到3 2. 依次下載對應(yīng)的文件,例如:src.asar.update, node_modules.asar.update,下載完成后,直接替換舊的文件 3. 最后require("src.asar").createApp()創(chuàng)建主界面,現(xiàn)在就能保證應(yīng)用啟動時都是最新的代碼(只要下載沒出問題)結(jié)束
就這樣一個簡單的方案,運營也沒在抱怨更新麻煩,皆大歡喜。當(dāng)然面對真實用戶場景,應(yīng)該還有很多欠缺的地方,以后慢慢再學(xué)習(xí)改進(╯▔^▔)╯。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/51149.html
摘要:如果第一次分發(fā)倒是沒啥問題,但是每次都這樣整個應(yīng)用讓運營手動更新,運營肯定不爽,必須得搞個自動更新方案出來。根據(jù)這樣的更新方案,項目的目錄結(jié)構(gòu)也得做一點改變,在我的項目下主要三個文件夾,,。 第一次開發(fā)Electron應(yīng)用 背景 由于工作內(nèi)容大多是一些日?;顒樱m然活動都以已經(jīng)做好模板為主,實際并不需要什么開發(fā)量,一般都是調(diào)一下按鈕的位置、顏色、字體大小什么的就可以立即發(fā)布,但是運營覺...
摘要:最近一直在做應(yīng)用的打包,集成版本的自動更新時出現(xiàn)了問題。針對上述上打包無法進行正確代碼簽名的問題,通過設(shè)置環(huán)境變量和使用進行代碼簽名可以解決。 最近一直在做electron應(yīng)用的打包,集成mac版本的自動更新時出現(xiàn)了問題。具體打包流程請參考:Electron 桌面應(yīng)用打包(npm run build)簡述(windows + mac)Electron應(yīng)用集成自動更新功能可參考:Elec...
摘要:作者鐘離,酷家樂客戶端負(fù)責(zé)人原文地址酷家樂客戶端下載地址文章背景在酷家樂客戶端在改版成功后,我們積累了許多的寶貴的經(jīng)驗和最佳實踐。用戶在電腦上安裝客戶端,實際上會將客戶端代碼文件持久儲存到本機。通常我們會在軟件啟動時檢查更新。 作者:鐘離,酷家樂PC客戶端負(fù)責(zé)人原文地址:https://webfe.kujiale.com/electron-autoupdate/酷家樂客戶端:下載地址...
摘要:作者鐘離,酷家樂客戶端負(fù)責(zé)人原文地址酷家樂客戶端下載地址文章背景在酷家樂客戶端在改版成功后,我們積累了許多的寶貴的經(jīng)驗和最佳實踐。用戶在電腦上安裝客戶端,實際上會將客戶端代碼文件持久儲存到本機。通常我們會在軟件啟動時檢查更新。 作者:鐘離,酷家樂PC客戶端負(fù)責(zé)人原文地址:https://webfe.kujiale.com/electron-autoupdate/酷家樂客戶端:下載地址...
閱讀 1498·2021-11-24 11:16
閱讀 2706·2021-07-28 12:32
閱讀 2312·2019-08-30 11:22
閱讀 1452·2019-08-30 11:01
閱讀 608·2019-08-29 16:24
閱讀 3554·2019-08-29 12:52
閱讀 1635·2019-08-29 12:15
閱讀 1344·2019-08-29 11:18