Posted at

Electronアップデータのチャネル対応

自分用メモなので殴り書き注意

もろもろ都合でelectron, electron-builderも古い。

けど、基本的な構造はそんな変わってない。。。ような気がする。。。(未確認)


package.json 設定


package.json

  "dependencies": {

"electron-auto-updater": "^1.0.0"
...
}
"devDependencies": {
"electron": "^2.0.0",
"electron-builder": "^20.15.1",
"electron-packager": "^12.1.0",
"electron-updater": "^2.21.10"
},
"build": {
"win": {
"target": "nsis",
"icon": "icon.ico",
"publish": [
{
"provider": "generic",
"url": "{インストーラ配置URL}"
}
]
}
}

インストーラ配置URLには、build実行時にできる「latest.yml」と、インストーラEXE実体を置く。

HTTPS対応してないとダメだったような。

インストーラEXEはバージョンによってファイル名変わる。


アップデータ処理


main.js

const autoUpdater = require('electron-auto-updater').autoUpdater;

// アップデート確認
autoUpdater.checkForUpdates();

// アップデート確認開始
autoUpdater.addListener('checking-for-update', function() {
console.log("checking-for-update");
});

// アップデートあり
autoUpdater.addListener('update-available', function() {
console.log("update-available");

// レンダープロセスへ通知
mainWindow.webContents.send('update_available', 'アップデートあったよ');
mainWindow.webContents.on('did-finish-load', () => {
console.log('did-finish-load');
mainWindow.webContents.send('update_available', 'アップデートあったよ');
});
});

// アップデートなし
autoUpdater.addListener('update-not-available', function() {
console.log("update-not-available");

mainWindow.webContents.send('update_not_available', 'アップデートなかったよ');
mainWindow.webContents.on('did-finish-load', () => {
console.log('did-finish-load');
mainWindow.webContents.send('update_not_available', 'アップデートなかったよ');
});
});

// アップデートダウンロード完了
autoUpdater.addListener('update-downloaded', function(event, releaseNotes, releaseName, releaseDate, updateURL) {
console.log("update-downloaded");
console.log(releaseName);
mainWindow.webContents.send('update_downloaded', 'DLしたよ');
return true;
});

// アップデートインストール開始(レンダラープロセスから呼ぶ)
ipc.on('do_quit_and_install', function(event, args) {
console.log("do_quit_and_install");
autoUpdater.quitAndInstall();
});



バージョン、マルチチャネル

バージョンは通常「X.X.X」形式

package.json内のバージョンを「X.X.X-beta.1」などとすると、betaチャネル用のビルドが作成できる。

対応している文字列は、「alpha」「beta」。(他にもあるかもしれないが未確認)

ベータ版でインストールした場合は、アップデートチャネルがbetaとなる。

(アップデータ配置URL内の、beta.ymlを参照しにいく)

ベータ版インストール後に自動で通常版に戻したい場合は、beta.ymlの内容を、latest.ymlの内容で置き換える。