日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Electron 自動更新,繞過 latest.yml 使用自定義接口

來源: 責編: 時間:2023-12-04 09:21:28 235觀看
導讀大家好,我是楊成功。在上一篇文章《手擼 Electron 自動更新,再繁瑣也要搞懂它》中,我們詳細介紹了 Electron 自動更新的全流程。簡單來說,就是打包生成 latest.yml 文件和安裝包,并上傳到服務器。客戶端打開時訪問服務端的

QF528資訊網——每日最新資訊28at.com

大家好,我是楊成功。QF528資訊網——每日最新資訊28at.com

在上一篇文章《手擼 Electron 自動更新,再繁瑣也要搞懂它》中,我們詳細介紹了 Electron 自動更新的全流程。QF528資訊網——每日最新資訊28at.com

簡單來說,就是打包生成 latest.yml 文件和安裝包,并上傳到服務器。客戶端打開時訪問服務端的 latest.yml 地址,判斷是否有新版本,有則自動下載新包并更新。QF528資訊網——每日最新資訊28at.com

對于以上的更新流程,很多朋友在評論區留言表示不夠靈活,比如:QF528資訊網——每日最新資訊28at.com

  • 只能自動更新嗎?能不能通過后端接口來判斷是否更新?
  • 必須要用 latest.yml 嗎?能不能繞開它?
  • 如何區分 Window、Mac、Mac M1 三種安裝包?

下面我們一一解答這些問題,并手擼一個更靈活的自動更新接口。QF528資訊網——每日最新資訊28at.com

如何本地測試更新?

在開發階段想測試一下檢測更新的流程走沒走通,可能不太好測試,因為 Electron 默認在開發環境下會繞過更新檢測。QF528資訊網——每日最新資訊28at.com

開發環境下 Electron 啟動后,如果接入了自動更新,主進程控制臺會打印下面的信息:QF528資訊網——每日最新資訊28at.com

Skip checkForUpdates because application is not packed and dev update config is not forcedQF528資訊網——每日最新資訊28at.com

意思是當前是開發環境,未打包,所以繞過檢測。Electron 通過 app.isPackaged 的值來判斷是否打包,那么在開發環境下,我們可以修改一下這個值:QF528資訊網——每日最新資訊28at.com

import { app } from 'electron';// 未打包時是開發環境if (!app.isPackaged) {  Object.defineProperty(app, 'isPackaged', {    get: () => true,  });}

重新運行,大概率會看到第二個錯誤:QF528資訊網——每日最新資訊28at.com

Error: ENOENT: no such file or directory /xxxx/app-update.ymlQF528資訊網——每日最新資訊28at.com

因為沒有打包嘛,所以找不到 app-update.yml 這個文件,索性我們就創建一個。QF528資訊網——每日最新資訊28at.com

在根目錄下創建一個 dev-update.yml 文件(文件名可自定義),寫入配置:QF528資訊網——每日最新資訊28at.com

provider: genericupdaterCacheDirName: demo-updater # 下載目錄

然后在開發環境指定這個配置文件地址:QF528資訊網——每日最新資訊28at.com

import { app } from 'electron';import path from "path";if(!app.isPackaged) {  ...  autoUpdater.updateConfigPath = path.join(__dirname, "../../dev-update.yml");}

重新運行項目,會發現檢測更新的邏輯可以正常執行了。QF528資訊網——每日最新資訊28at.com

能不能繞開 latest.yml,走后端接口?

可能大家希望的檢查更新流程是這樣:QF528資訊網——每日最新資訊28at.com

調用后端的 API 接口,接口返回 JSON 格式數據,包含最新的版本號和安裝包下載地址。將該版本號與本地版本號做對比,如果不一樣則表示有更新,并執行下載。QF528資訊網——每日最新資訊28at.com

然而 electron-updater 是通過 latest.yml 文件來獲取版本號等信息。latest.yml 是一個配置文件,內容如下:QF528資訊網——每日最新資訊28at.com

version: 1.0.2files:  - url: elapp_1.0.2.exe    sha512: xxxxxx    size: 72716511path: elapp_1.0.2.exesha512: xxxxxxreleaseDate: '2023-11-29T02:28:28.032Z'

大家想繞過它,可能是因為 YAML 文件的內容看不太懂,或者與接口格式不匹配。其實它就是一個普通的配置文件,轉換成 JSON 格式如下:QF528資訊網——每日最新資訊28at.com

{  "version": "1.0.2",  "files": [    {      "url": "elapp_1.0.2.exe",      "sha512": "xxxxxx",      "size": "72716511"    }  ],  "path": "elapp_1.0.2.exe"}

可能有人會問:配置文件可以改成latest.json嗎,這樣后端就可以動態返回了。QF528資訊網——每日最新資訊28at.com

我仔細查閱過文檔,目前只支持 YAML 文件,不支持 JSON,所以 latest.yml 無法繞開。但這只是官方說法,咱還是有辦法滴。QF528資訊網——每日最新資訊28at.com

經過大量測試,我發現把 latest.yml 文件的內容手動改成 JSON 格式也是可以的。這樣的話,就可以寫一個接口來模擬 latest.yml 的地址。QF528資訊網——每日最新資訊28at.com

假設 latest.yml 的訪問路由是/ele-app/latest.yml,那么寫一個接口如下:QF528資訊網——每日最新資訊28at.com

const app = require('express')()app.get('/ele-app/latest.yml', (req, res, next) => {  let resinfo = {    version: "1.0.25",    path: "xxx_1.0.25.exe"    sha512: "xxxxxx"  }  res.send(resinfo)})

該接口就是自定義的檢測更新接口。接口返回值中至少要包含version、path、sha512三個屬性(與 latest.yml 中的配置保持一致)。這樣我們不需要上傳 latest.yml 文件了,用該接口替代即可。QF528資訊網——每日最新資訊28at.com

基于該檢測更新接口,接下來我們逐步實現自定義更新流程。QF528資訊網——每日最新資訊28at.com

如何區分 Windows 和 Mac 系統

對于 Windows 和 Mac 兩個系統的更新,electron-updater 使用不同的配置文件,分別是 latest.yml  latest-mac.ymlQF528資訊網——每日最新資訊28at.com

從上一步的檢測更新接口來看,不同的配置文件就是不同的路由,我們改造接口如下:QF528資訊網——每日最新資訊28at.com

app.get('/ele-app/:platform', (req, res, next) => {  let { platform } = req.params  let resinfo = null  // 返回 Windows 配置  if(platform == 'latest.yml') {    resinfo = {      version: "1.0.2",      path: "xxx_1.0.2.exe"      sha512: "xxxxxx"    }  }  // 返回 Mac 配置  if(platform == 'latest-mac.yml') {    resinfo = {      version: "1.0.3",      path: "xxx_1.0.3.dmg"      sha512: "xxxxxx"    }  }  if(!resinfo) {    resinfo = { code: 400, msg: '參數錯誤' }  }  res.send(resinfo)})

上面代碼中,使用動態路由返回 Windows 和 Mac 的配置,同時兼容了兩個平臺的更新檢測。QF528資訊網——每日最新資訊28at.com

完整的自定義更新流程

經過上面的介紹,自定義檢測更新的關鍵思路已經講清楚了。完整的更新流程如下:QF528資訊網——每日最新資訊28at.com

(1)打包各個平臺的安裝包,上傳服務器。QF528資訊網——每日最新資訊28at.com

如何打包在上一篇介紹過,就不展開說了。注意的是:現在你只需要上傳安裝包,不需要上傳 latest.yml 文件。QF528資訊網——每日最新資訊28at.com

(2)在主進程中設置更新地址,并手動控制更新。QF528資訊網——每日最新資訊28at.com

假設我們編寫的檢測更新接口已經部署,設置方法如下:QF528資訊網——每日最新資訊28at.com

import { autoUpdater } from 'electron-updater';// 設置檢測更新的地址autoUpdater.setFeedURL('http://[xxx]/ele-app');// 不自動下載autoUpdater.autoDownload = false;// 觸發檢測autoUpdater.checkForUpdatesAndNotify().catch();// 監聽到可更新autoUpdater.on('update-available', (info) => {  // info 是檢測更新接口返回的數據  if (info.can_download) {    // can_download 是自定義屬性    autoUpdater.downloadUpdate();  }});

(3)編寫檢測更新接口,返回配置。QF528資訊網——每日最新資訊28at.com

返回的配置我們可以自定義,假設返回結果如下:QF528資訊網——每日最新資訊28at.com

{  "version": "1.0.2",  "path": "http://xxx/xxx_1.0.2.exe",  "sha512": "xxxxxx",  "can_download": false}

上述示例中,接口返回了自定義屬性 can_download,我們在第(2)步中使用了該屬性,用于判斷是否執行下載更新。QF528資訊網——每日最新資訊28at.com

通過這種方式,即便我們更新了安裝包,也可以自由決定是否要下載安裝。QF528資訊網——每日最新資訊28at.com

這里有一個小驚喜:path 屬性的值可以是一個完整的安裝包地址,這樣可以把安裝包上傳到任意地方。如果值是一個文件名,那么會以第(2)步中 setFeedURL() 方法設置的地址為前綴。QF528資訊網——每日最新資訊28at.com

提醒:sha512 屬性的值必須從打包生成的 latest.yml 中獲取,不可以隨意寫,否則在安裝時不能通過檢驗,會報這個錯:QF528資訊網——每日最新資訊28at.com

Error: sha512 checksum mismatchQF528資訊網——每日最新資訊28at.com

特別篇:Mac 如何區分 Intel 和 M1?

Mac 系統有兩種軟件包,分別對應 M1 芯片和 Intel 芯片,兩者不兼容。一般打包時我們也會構建兩種安裝包。QF528資訊網——每日最新資訊28at.com

那么在檢測更新時,我們就需要返回適配當前系統的安裝包。但不管是 M1 還是 Intel 都使用 latest-mac.yml 這一個配置文件,該如何區分呢?QF528資訊網——每日最新資訊28at.com

這個時候就要從主進程中獲取參數,然后傳給接口了。步驟如下:QF528資訊網——每日最新資訊28at.com

(1)在主進程中,獲取系統架構,并通過請求頭傳給檢測更新接口。QF528資訊網——每日最新資訊28at.com

import { autoUpdater } from 'electron-updater';// 添加請求頭autoUpdater.requestHeaders = {  elearch: process.arch,};

(2)在接口中接收參數,并在返回 Mac 配置中判斷:QF528資訊網——每日最新資訊28at.com

app.get('/ele-app/:platform', (req, res, next) => {  let { platform } = req.params  let { elearch } = req.headers  if(platform == 'latest-mac.yml') {    if(elearch == 'arm64') {      // M1      return {...}    } else {      // Intel      return {...}    }  }})

有了上面的邏輯,我們在打包時就可以單獨打兩個包,分別上傳,然后在檢測時返回不同的下載地址。QF528資訊網——每日最新資訊28at.com

總結

本文使用自定義接口的方式,繞過了 latest.yml 配置文件,使自動更新的靈活性更高,也更符合我們的常規習慣,但是需要維護一個更新接口。QF528資訊網——每日最新資訊28at.com

如果不想維護接口,那么上傳 latest.yml 文件的方式更適合你。QF528資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-37267-0.htmlElectron 自動更新,繞過 latest.yml 使用自定義接口

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go中的switch的六種使用:沒有你想象中那么簡單

下一篇: Python的函數遞歸與調用,你會嗎?

標簽:
  • 熱門焦點
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼‍‍‍‍‍‍‍‍‍‍東方甄選創始人俞敏洪帶隊的“7天甘肅行”直播活動已在近日順利收官。成立后一
  • 攜眾多高端產品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數字娛樂領域最具知名度與影響力的年度盛會中國國際數碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領先的科
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top 主站蜘蛛池模板: 紫金县| 许昌县| 筠连县| 汉川市| 河东区| 马关县| 乌拉特后旗| 昌平区| 安图县| 万宁市| 平遥县| 潍坊市| 元朗区| 平安县| 遵义县| 鹿泉市| 盖州市| 新郑市| 苍山县| 政和县| 武川县| 徐州市| 南宁市| 长治市| 定州市| 蕲春县| 久治县| 治县。| 南漳县| 连云港市| 阿拉尔市| 赞皇县| 重庆市| 桐城市| 中山市| 南靖县| 宁远县| 陆丰市| 扎鲁特旗| 札达县| 静海县|