- package.json
"build": { "appId": "com.***.app", "productName": "****", "directories": { "output": "build" }, "dmg": { "contents": [ { "x": 410, "y": 150, "type": "link", "path": "/Applications" }, { "x": 130, "y": 150, "type": "file" } ] }, "mac": { "icon": "./assets/icons/mac.icns", "target": [ "zip", "dmg" ], "publish": [ { "provider": "generic", "url": "http://*********/win" } ] }, "win": { "icon": "./assets/icons/win.ico", "target": [ "nsis", "zip" ], "publish": [ { "provider": "generic", "url": "http://**********/win" } ] }, "linux": { "icon": "./assets/icons" }, "nsis": { "oneClick": false, "allowToChangeInstallationDirectory": true, "perMachine": true, "artifactName": "${productName}-setup-${version}.${ext}" } }
- 主进程
const { app, BrowserWindow, ipcMain} = require('electron'); const { autoUpdater } = require('electron-updater'); // path是node 内置模块 拼接路径 const path = require('path'); let win, webContents; // 创建窗口 // 自定义方法 function ml_createrWindwo () { // 创建窗口 win = new BrowserWindow({ webPreferences:{ nodeIntegration: true, }, titleBarStyle: 'hidden', frame: false, resizable: false, show: false, width:880, height:540, }); // win.maximize(); // 加载内容 // 加载远程地址 // win.loadURL('http://www.baidu.com/') // 加载本地 // __dirname :当前JS文件所在文件路径,绝对路径 // 相对路径 win.loadURL(path.join(__dirname,'./index.html')) // max 系统的 :win.loadURL(path.join('file://',__dirname,'./index.html')) webContents = win.webContents; win.once('ready-to-show', () => { win.show() }) // 关闭窗口 win.on('close',function () { //TODO: 关闭窗口前想做的事 win = null; }) //监听窗口最大化 win.on('maximize', () => { win.webContents.send('maximize'); }) //监听窗口最小化 win.on('unmaximize', () => { win.webContents.send('unmaximize'); }) ml_updateHandle(); } //检查更新 const uploadUrl='http://********/win'; // 安装包latest.yml所在服务器地址 // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写 function ml_updateHandle () { let message = { error: {status: -1, msg: '检测更新查询异常'}, checking: {status: 0, msg: '正在检查更新...'}, updateAva: {status: 1, msg: '检测到新版本,正在下载,请稍后'}, updateNotAva: {status: 2, msg: '您现在使用的版本为最新版本,无需更新!'}, } let versionInfo = ''; autoUpdater.setFeedURL(uploadUrl) // 检测更新查询异常 autoUpdater.on('error', function (error) { sendUpdateMessage(message.error) }) // 当开始检查更新的时候触发 autoUpdater.on('checking-for-update', function () { sendUpdateMessage(message.checking) }) // 当发现有可用更新的时候触发,更新包下载会自动开始 autoUpdater.on('update-available', function (info) { sendUpdateMessage(message.updateAva) }) // 当发现版本为最新版本触发 autoUpdater.on('update-not-available', function (info) { sendUpdateMessage(message.updateNotAva) }) // 更新下载进度事件 autoUpdater.on('download-progress', function (progressObj) { webContents.send('downloadProgress', progressObj) }) // 包下载成功时触发 autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) { // 收到renderer进程确认更新 ipcMain.on('updateNow', (e, arg) => { console.log('开始更新') autoUpdater.quitAndInstall() // 包下载完成后,重启当前的应用并且安装更新 }) // 主进程向renderer进程发送是否确认更新 webContents.send('isUpdateNow', versionInfo) }) ipcMain.on('checkForUpdate', () => { // 收到renderer进程的检查通知后,执行自动更新检查 // autoUpdater.checkForUpdates() let checkInfo = autoUpdater.checkForUpdates() checkInfo.then(function (data) { versionInfo = data.versionInfo; // 获取更新包版本等信息 }) }) } // 通过main进程发送事件给renderer进程,提示更新信息 function sendUpdateMessage (text) { webContents.send('message', text) }
页面
const { ipcRenderer: ipc } = require('electron'); mounted () { let vm = this; ipc.send('checkForUpdate'); vm.version = package.version; ipc.on('unmaximize', (event) => { this.full = false; }); ipc.on('maximize', (event) => { this.full = true; }); ipc.on('message', (event, data) => { console.log('message', data.msg) }) ipc.on('downloadProgress', (event, progressObj) => { this.spinShow = true; this.percent = parseFloat(progressObj.percent).toFixed(2); // 可自定义下载渲染效果 }) ipc.on('isUpdateNow', (e, versionInfo) => { vm.vnew = true; vm.new_version = versionInfo.version; this.spinShow = false; // 自定义选择效果,效果自行编写 vm.$Modal.warning({ title: '*************', content: '检测到新版本' + versionInfo.version + ',是否立即重启升级?', onOk () { ipc.send('updateNow'); } }) }) setTimeout(function (){ vm.vcont = true; },200) }, beforeDestroy () { // 移除ipcRenderer所有事件 ipc.removeAllListeners() },
electron + nodejs (热更新)
最新推荐文章于 2024-09-28 15:52:44 发布