предисловие
Мы разрабатываем настольное электронное приложение и надеемся, что, как только мы выпустим последнюю версию, пользователь будет уведомлен об обновлении нового пакета. Те, что идут с электроном, имеютautoUpdater
, на этот раз мы выбираемelectron-updater
Это сторонний плагин. Давайте поговорим о том, что происходит с электрономautoUpdater
Недостаток в том, что нет возможности контролировать время загрузки (на данный момент я вижу, что в официальном документе нет этой функции, если есть какое-то исправление, добро пожаловать), и я не знаю ход загрузки; иelectron-updater
Но есть эта функция, Самое большое преимущество этой функции в том, что мы можем иметь несколько версий в официальной среде и время от времени отслеживать ход загрузки;
electron-updater
Инструкции по применению
1. Представьте
$ yarn add electron-updater electron-log electron-is-dev
-
electron-updater
Зависимости, необходимые для автоматического обновления -
electron-log
Обновленный журнал может храниться локально -
electron-is-dev
Определить, является ли электрон средой разработки
2,electron-updater
Описание каждого события в
Event: error
Срабатывает при возникновении ошибки в обновлении
вернуть:
-
error
Error
Event: checking-for-update
Запускается, когда начинается проверка обновлений
возвращает:
- нет возвращаемого значения
Event: update-available
Запускается, когда доступен пакет обновления
возвращает:
{
"version": "0.1.0", // 最新版本号
"files": [{
"url": "text Setup 0.1.0.exe", // 包的名称
"sha512": "xxx",
"size": 899999562, // 包的大小
}],
"path": "text Setup 0.1.0.exe", // 包的名称
"sha512": "xxx",
"relaseDate": "2019-11-07T10:26:23.286Z", // 新包发布时间
"relaseNotes": "修复XXX", // 新包发布内容
}
Event: update-not-available
Срабатывает, когда не обнаружено доступных обновлений
возвращает:
- нет возвращаемого значения
Event: download-progress
Следите за ходом загрузки
возвращает:
{
"delta":"22108084", // 差量
"bytesPerSecond": "20243532", // 下载速度
"percent":'73.32491979950667', // 已下载的百分比
"total":"82879166", // 更新包的大小
"transferred": "82879166" // 已下载的包大小
}
Event: update-downloaded
Запускается при загрузке пакета обновления
Возвращаемое значение:
{
"version": "0.1.0", // 最新版本号
"files": [{
"url": "text Setup 0.1.0.exe", // 包的名称
"sha512": "xxx",
"size": 899999562, // 包的大小
}],
"path": "text Setup 0.1.0.exe", // 包的名称
"sha512": "xxx",
"relaseDate": "2019-11-07T10:26:23.286Z", // 新包发布时间
"relaseNotes": "修复XXX", // 新包发布内容
}
метод:
autoUpdater
имеет следующие методы
-
autoUpdater.checkForUpdates() => Promise<UpdateCheckResult>
Спросите сервер, доступно ли обновление
-
autoUpdater.checkForUpdatesAndNotify() ⇒ Promise< | UpdateCheckResult>
Спросите сервер, есть ли обновление, загрузите его и сообщите, доступно ли обновление.
-
autoUpdater.downloadUpdate(cancellationToken) ⇒ Promise<any>
Начните скачивать обновления вручную. если
autoDownload
установлен, вы можете использовать этот методfalse
вернуть:
Promise<any>
- Путь к скачанному файлу.cancelToken CancellationToken
-
autoUpdater.getFeedURL()⇒ undefined| null|String autoUpdater.setFeedURL(options)
Настройте поставщика обновлений. если значение
string
,ноОбщие параметры серверазначение будет установлено наurl
.Опции
PublishConfiguration
|String
|GithubOptions
|S3Options
|SpacesOptions
|GenericServerOptions
|BintrayOptions
- если вы хотите переопределить конфигурацию вapp-update.yml
. -
autoUpdater.channel (getter和setter
Используйте для определения канала, которому будет следовать программа автоматического обновления (см.Используйте каналы для автоматических обновлений),
autoUpdater.channel = 'beta'
или используйте, чтобы получить текущий каналcurrentChannel = autoUpdater.channel
. -
autoUpdater.quitAndInstall(isSilent, isForceRunAfter)
После загрузки обновления перезапустите приложение и установите обновление. должно быть только
update-downloaded
Он вызывается после его испускания.Уведомление:
autoUpdater.quitAndInstall()
сначала закроет все окна приложения перед выдачейbefore-quit
мероприятиеapp
. Это отличается от обычной последовательности выходных событий.isSilent
Boolean
- только WindowsЗапустите установщик в тихом режиме. По умолчаниюfalse
.isForceRunAfter
-Boolean
Даже автоматическая установка может запустить приложение после завершения. не применяетсяmacOS
. игнорировать лиisSilent
Установить какfalse
.
API
-
autoDownload
=true
Boolean — следует ли автоматически загружать обновления после их обнаружения. -
autoInstallOnAppQuit
=true
boolean - устанавливать ли автоматически скачанные обновления при выходе из приложения (еслиquitAndInstall
ранее не звонил).Доступно только для Windows и Linux.
-
allowPrerelease
=false
boolean - * Только провайдеры GitHub. * Разрешить ли обновлять предварительные версии. По умолчаниюtrue
Содержит ли версия приложения предварительные версии компонентов (например,0.12.1-alpha.1
, здесьalpha
для предварительных версий компонентов), в противном случаеfalse
.если
true
, даунгрейд разрешен (allowDowngrade
будет установлен наtrue
). -
fullChangelog
=false
boolean - * Только провайдеры GitHub. * Получите все примечания к выпуску (от текущего до последнего), а не только последний. -
allowDowngrade
=false
Boolean — разрешать ли переход на более раннюю версию (когда пользователь из бета-канала хочет вернуться к стабильному каналу).Учитывается только если каналы разные (с точки зрения семантического версионирования, предрелизных компонентов).
-
currentVersion
SemVer — текущая версия приложения. -
channel
Строка — получить канал обновления. Недоступно для GitHub.channel
Не вернется из конфигурации обновления, только если она была установлена ранее. -
requestHeaders
[key:string]:string — Заголовки запроса. -
logger
Журнал вы можете пройти через следующий интерфейсelectronic-log,winstonили другие журналы:{ info(), warn(), error() }
. Если вы хотите отключить ведение журнала, установите для него значениеnull
. -
signals
=new UpdaterSignal(this)
UpdaterSignal-Для безопасности типов вы можете использовать такие сигналы, какautoUpdater.signals.updateDownloaded(() => {})
заменятьautoUpdater.on('update-available', () => {})
Пример автоматического обновления
- существует
package.json
конфигурация в
{
....
"build": {
"releaseInfo": {
"releaseNotes": "优化我的订单、信息库、角色功能,新增退费、退费订单审核" // 更新的内容
},
"publish": [
{
"provider": "generic",
"url": "http://127.0.0.1:8080/download/", // 推送的地址
"channel": "latest" // 检查更新的渠道
}
],
}
....
}
- добавить в каталог
app-updater.yml 和 dev-app-updater.yml
файл, используемый в качестве конфигурации для проверки обновленных файлов
# 在app-update.yml中配置检查更新的地址,这个地址为正式环境下的更新地址
provider: 'generic'
url: 'http://127.0.0.1:8080/download/'
channel: 'latest'
# 在dev-app-update.yml中配置检查更新的地址,这个地址为开发环境下的地址
provider: 'generic'
url: 'http://127.0.0.1:8080/test-download/'
channel: 'latest'
- существует
APPAutoUpdater.js
середина
const { autoUpdater } = require('electron-updater')
const Store = require('electron-store')
const path = require('path')
global.store = new Store()
autoUpdater.logger = require('electron-log')
// 监听输出的日志
autoUpdater.logger.transports.file.level = 'info'
// 设置当前的版本号为自动更新的版本号
global.currentVersion = autoUpdater.currentVersion
autoUpdater.autoDownload = false // 将自动下载包设置为false,产品的需求是让用户自己点击更新下载
// 监听自动更新的几个事件
// 监听如果自动更新失败将停止安装
autoUpdater.on('error', () => {
// todo something
})
// 检查更新是否已开始时发出
autoUpdater.on('checking-for-update', () => {})
// 检测有可更新的应用包
autoUpdater.on('update-available', info => {
// todo something
})
// 检测没有可用更新时发出
autoUpdater.on('update-not-available', info => {
// todo something
})
// 下载可更新的安装包
autoUpdater.on('update-downloaded', info => {
// todo something
})
// 监听下载进度
autoUpdater.on('download-progress', info => {
// todo something
})
module.exports = {
checkVersion() {
if (global.isDev) {
autoUpdater.updateConfigPath = path.join(__dirname, '../../dev-app-update.yml')
}
autoUpdater.checkForUpdates()
}
}
- В основном процессе электронного index.js
// 主页面一旦加载完成后就开始执行检查更新
mainWindow.webContents.on('did-finish-load', () => {
AppUpdater.checkVersion()
})