自分用メモなので殴り書き注意
もろもろ都合で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の内容で置き換える。