electron-asar-hot-updater
What it is
一個用於
electron
的NodeJs模組,用於支援app.asar的更新,基於electron-asar-updater
重構
Github: github.com/yansenlei/e…
如果electron-updater
支援差異更新,那應該是最佳選擇了,貌似目前正在嘗試,期待ing...
如何工作 (Read this first)
- 用於處理更新Electron應用程式內app.asar檔案的過程;它只是用名為“update.asar”的新檔案替換app.asar檔案(在/ resources /)!
- 檢查“更新”必須由應用程式觸發。
EAU
不會自行進行任何形式的定期檢查。 EAU
與API進行對話,告訴它是否有新的更新。- API接收來自EAU的請求,其中包含客戶端當前版本的應用程式(必須在應用程式package.json檔案中指定)
- 然後,API以新更新響應,或者只是false以中止。
- 如果有可用更新,則API應使用此更新update.asar檔案的源進行響應。
- EAU然後下載.asar檔案,刪除舊的app.asar並將update.asar重新命名為app.asar。
為何要使用它 ? (用例)
- 如果您認為這些太複雜而無法實施: www.npmjs.com/package/ele… electron.atom.io/docs/v0.33.…
- 如果您認為在更換一個檔案(通常為40MB),.app或.exe檔案(最多100MB)是不合理的。
- 需要在更新時檢視進度。
- 選擇使用伺服器端檢查或客戶端檢查。
- 可以使用zip壓縮檔案,壓縮你的ASAR使其更小。
安裝
$ npm install --save electron-asar-hot-updater
複製程式碼
現在,在main.js檔案中,呼叫它如下:
const { app, dialog } = require('electron');
const EAU = require('electron-asar-hot-updater');
app.on('ready', function () {
// Initiate the module
EAU.init({
'api': 'http://...', // The API EAU will talk to
'server': false // Where to check. true: server side, false: client side, default: true.
});
EAU.check(function (error, last, body) {
if (error) {
if (error === 'no_update_available') { return false; }
dialog.showErrorBox('info', error)
return false
}
EAU.progress(function (state) {
// The state is an object that looks like this:
// {
// percent: 0.5,
// speed: 554732,
// size: {
// total: 90044871,
// transferred: 27610959
// },
// time: {
// elapsed: 36.235,
// remaining: 81.403
// }
// }
})
EAU.download(function (error) {
if (error) {
dialog.showErrorBox('info', error)
return false
}
dialog.showErrorBox('info', 'App updated successfully! Restart it please.')
})
})
})
複製程式碼
服務端例子
例如,伺服器可以返回版本詳細資訊
const express = require('express')
var bodyParser = require('body-parser');
const app = express()
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
var desktop_app_version = '1.0.0';
var desktop_app_URL = 'http://127.0.0.1:8083/update.asar' // or ../update.zip
app.post('/update', function (req, res) {
if(req.body && req.body.current != desktop_app_version){ // check for server side
res.write(JSON.stringify( {"last": desktop_app_version, "source": desktop_app_URL} ).replace(/[\/]/g, '\\/') );
}else{
res.write(JSON.stringify( {"last": desktop_app_version} ).replace(/[\/]/g, '\\/') );
}
res.end();
});
app.listen(3000)
console.log('run port: 3000')
複製程式碼
或者您可以返回版本資訊供客戶端檢查
app.post('/update', function (req, res) {
res.write(JSON.stringify( {
"name": "app",
"version": "0.0.1",
"asar": "http://127.0.0.1:8083/update.asar",
"info": "1.fix bug\n2.feat..."
} ).replace(/[\/]/g, '\\/') );
res.end();
});
複製程式碼
如果您使用zip檔案,外掛將在下載後解壓縮檔案,這將使你的更新檔案更小,但你必須確保update.asar
位於zip包的根目錄:
── update.zip
└── update.asar
複製程式碼
License
歡迎提交Issues、PR
MIT - yansenlei