注:本文使用的是 electron-builder 配合 electron-updataer 实现自动更新效果。该方案仅在 Windows环境中适用,Mac环境比本文多一步安装证书,需要自行解决,Linux环境请直接跳过本文。
npm install electron-builder --save-dev
npm install module-name --save 自动把模块和版本号添加到dependencies部分
npm install module-name --save-dev 自动把模块和版本号添加到devDependencies部分
package.json文件中的 version 值,控制着打出来包的版本。
在package.json文件中把下面的打包配置写在和 scripts 配置同级的地方。
- "build": {
- "productName":"xxxx", //项目名 这也是生成的exe、dmg文件的前缀名
- "appId": "com.xxx.xxxxx", //包名 打包mac时写成自己应用的appId,打包Windows随意添写
- "copyright":"xxxx", //版权信息 安装好后出品公司显示的就是该内容
- "directories": { //打包输出位置的文件夹
- "output": "./out"
- },
- "nsis": { //nsis相关配置,打包方式为nsis时生效
- "oneClick": false, //是否一键安装
- "allowElevation": true, //允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序。
- "allowToChangeInstallationDirectory": true, //允许修改安装目录
- "installerIcon": "./aa.ico", //安装图标
- "uninstallerIcon": "./aa.ico", //卸载图标
- "installerHeaderIcon": "./aa.ico", //安装时头部图标
- "createDesktopShortcut": true, //创建桌面图标
- "createStartMenuShortcut": true, //创建开始菜单图标
- "shortcutName": "xxxx", //图标名称
- },
- "publish": [
- {
- "provider": "generic", //服务器提供商,也可以是GitHub、自己服务器等,全部都在这个值就行
- "url": "http://xxxxx/" //服务器地址 里面可以访问到 latest.yml 以及生成的安装包
- }
- ],
- "files": [ //打包后需要使用的h5相关文件
- "./css",
- "./html",
- "./js",
- "./index.html"
- ],
- "dmg": { //macOSdmg 打包mac软件使用的,这个可以不动
- "contents": [
- {
- "x": 410,
- "y": 150,
- "type": "link",
- "path": "/Applications"
- },
- {
- "x": 130,
- "y": 150,
- "type": "file"
- }
- ]
- },
- "win": {
- "icon": "./aims.ico", //软件图标
- "target": [
- {
- "target": "nsis", //使用nsis打成安装包,"portable"打包成免安装版,默认使用niss,win平台一般也是用这个
- "arch": [ //打包出来的安装包是64位还是32位,推荐使用32位,这样的包比较小
- "ia32" //32位
- ]
- }
- ]
- },
- "mac": { //软件图标
- "icon": "./icon.icns"
- },
- "linux": {
- "icon": "./icons"
- }
- }
在package.json文件scripts 配置中加上下面两行
- "scripts": {
- "start": "electron-forge start",
- "buildwin": "electron-builder --win", //这行
- "buildmac": "electron-builder --mac" //这行
- },
打包生成windos安装包
npm run buildwin
打包生成mac安装包(mac这一步需要配置证书,我没搞mac的软件,这步请自行解决)
npm run buildmac
将 latest.yml (mac软件是latest-mac.yml)以及安装包放到一个可以访问的地方,可以是GitHub、自己服务器等,只要你上面打包的路径能访问到就行。
npm install electron-updater --save
安装这个依赖包是为了看更新进度
npm install electron-log --save
注意:项目运行中的用到依赖包,除了 electron 包,其他的都要在package.json文件 dependencies 配置中写上包名和依赖名称,我们用到了 electron-updater 、electron-log 所以写法如下图:

- const {app, Menu, BrowserWindow, dialog} = require('electron');
- const {autoUpdater} = require('electron-updater');
- const path = require('path');
- const logger = require("electron-log");
-
- //打印log到本地
- logger.transports.file.maxSize = 1002430; // 10M
- logger.transports.file.format = "[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}";
- logger.transports.file.resolvePath = () => "./operation.log"; //打印在你安装的软件位置,
-
-
- //每次启动自动更新检查 更新版本 --可以根据自己方式更新,定时或者什么
- autoUpdater.checkForUpdates();
-
- autoUpdater.autoDownload = false;//这个必须写成false,写成true时,我这会报没权限更新,也没清楚什么原因
- autoUpdater.on('error', (error) => {
- logger.error(["检查更新失败", error])
- })
- //当有可用更新的时候触发。 更新将自动下载。
- autoUpdater.on('update-available', (info) => {
- logger.info('检查到有更新,开始下载新版本')
- autoUpdater.downloadUpdate()
- })
- //当没有可用更新的时候触发。
- autoUpdater.on('update-not-available', () => {
- logger.info('没有可用更新')
- })
- //在更新下载完成的时候触发。
- autoUpdater.on('update-downloaded', (res) => {
- logger.info('下载完毕!提示安装更新')
- //dialog 想要使用,必须在BrowserWindow创建之后
- dialog.showMessageBox({
- title: '升级提示!',
- message: '已为您下载最新应用,点击确定马上替换为最新版本!'
- }).then((index) => {
- logger.info('退出应用,安装开始!')
- //重启应用并在下载后安装更新。 它只应在发出 update-downloaded 后方可被调用。
- autoUpdater.quitAndInstall()
- });
- })