W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
有若干種方法可以自動(dòng)更新您的 Electron 應(yīng)用程序。 最簡(jiǎn)單并且獲得官方支持的方法是利用內(nèi)置的 Squirrel 框架和Electron的?autoUpdater
?模塊。
Electron 團(tuán)隊(duì)維護(hù) update.electronjs.org,一個(gè)免費(fèi)開(kāi)源的網(wǎng)絡(luò)服務(wù),可以讓 Electron 應(yīng)用使用自動(dòng)更新。 這個(gè)服務(wù)是設(shè)計(jì)給那些滿足以下標(biāo)準(zhǔn)的 Electron 應(yīng)用:
使用這個(gè)服務(wù)最簡(jiǎn)單的方法是安裝 update-electron-app,一個(gè)預(yù)配置好的 Node.js 模塊來(lái)使用 update.electronjs.org。
使用您選擇的 Node.js 包管理器安裝模塊:
npm | Yarn |
|
|
然后,從應(yīng)用的主進(jìn)程文件中調(diào)用更新模塊:
require('update-electron-app')()
默認(rèn)情況下,這個(gè)模塊會(huì)在應(yīng)用啟動(dòng)的時(shí)候檢查更新,然后每隔十分鐘再檢查一次。 當(dāng)發(fā)現(xiàn)了一個(gè)更新,它會(huì)自動(dòng)在后臺(tái)下載。 當(dāng)下載完成后,會(huì)顯示對(duì)話框允許用戶重啟應(yīng)用。
如果您需要自定義配置,您可以將選項(xiàng)傳遞給 update-electron-app 或直接使用更新服務(wù)。
如果你開(kāi)發(fā)的是一個(gè)私有的 Electron 應(yīng)用程序,或者你沒(méi)有在 GitHub Releases 中公開(kāi)發(fā)布,你可能需要運(yùn)行自己的更新服務(wù)器。
根據(jù)你的需要,你可以從下方選擇:
部署更新服務(wù)器后,您可以檢測(cè)應(yīng)用程序代碼以使用 Electron 的 autoUpdater 模塊接收和應(yīng)用更新。
首先,在您的主流程代碼中導(dǎo)入所需的模塊。以下代碼可能因不同的服務(wù)器軟件而異,但它的工作方式與使用 Hazel 時(shí)描述的一樣。
注意檢查執(zhí)行環(huán)境!
請(qǐng)確保以下代碼僅在打包的應(yīng)用程序執(zhí)行,而不是在開(kāi)發(fā)環(huán)境中。 您可以使用 ?
app.isPackaged
? API 來(lái)檢查環(huán)境。
const { app, autoUpdater, dialog } = require('electron')
接下來(lái),構(gòu)建更新服務(wù)器的 URL 并通知 ?autoUpdater
?:
const server = 'https://your-deployment-url.com'
const url = `${server}/update/${process.platform}/${app.getVersion()}`
autoUpdater.setFeedURL({ url })
最后一步,檢查更新。 下面的示例將在每分鐘檢查一次:
setInterval(() => {
autoUpdater.checkForUpdates()
}, 60000)
應(yīng)用程序被?packaged
?后, 它將接收你每次發(fā)布在 GitHub Release 上的的更新。
現(xiàn)在您已經(jīng)為應(yīng)用程序配置了基本的更新機(jī)制, 您需要確保在更新時(shí)通知用戶. 這可以使用 autoUpdater API 事件實(shí)現(xiàn):
autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
const dialogOpts = {
type: 'info',
buttons: ['Restart', 'Later'],
title: 'Application Update',
message: process.platform === 'win32' ? releaseNotes : releaseName,
detail:
'A new version has been downloaded. Restart the application to apply the updates.',
}
dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) autoUpdater.quitAndInstall()
})
})
另外,也請(qǐng)確認(rèn)錯(cuò)誤被處理。 下面是將錯(cuò)誤日志輸出到stderr
的例子。
autoUpdater.on('error', (message) => {
console.error('There was a problem updating the application')
console.error(message)
})
手動(dòng)處理更新
由于 autoUpdate 發(fā)出的請(qǐng)求不受您的直接控制,您可能會(huì)發(fā)現(xiàn)難以處理的情況(例如,如果更新服務(wù)器在身份驗(yàn)證之后)。 url 字段支持 file:// 協(xié)議,這意味著通過(guò)一些努力,您可以通過(guò)從本地目錄加載更新來(lái)避開(kāi)該過(guò)程的服務(wù)器通信方面。這是一個(gè)如何工作的例子。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: