Appearance
从0实现一个electron自动更新的最小demo
本实例基于vue,不使用vue也大同小异,目的只是在后期更加的方便使用组件库,有差异的地方我会指出。
初始化一个vue项目
shell
# 初始化项目,前面的vue脚手架环境安装忽略
vue create electron-updater-demo
# 中间的流程略
cd electron-updater-demo
npm i
# 安装 electron-builder 插件
vue add electron-builder
# 如果你不是使用的vue 可以直接`npm i electron-builder`安装
# 运行
npm run electron:serve项目结构
shell
├──public
│ ├──favicon.ico
│ └──index.html
├──src
│ ├──assets
│ │ └──logo.png
│ ├──components
│ │ └──HelloWorld.vue
│ ├──App.vue
│ ├──background.js
│ └──main.js
├──.browserslistrc
├──.gitignore
├──babel.config.js
├──package-lock.json
├──package.json
├──README.md
└──vue.config.js输出结构的工具推荐
npm i treeplus使用方法
修改app.vue
这里的目的是清晰的暂时当前版本号。
html
<template>
<div id="app">
这是一个版本更新测试:Artiely
<p>当前版本:{{ version }}</p>
</div>
</template>
<script>
const { version } = require('../package.json')
console.log('version', version)
export default {
name: 'App',
data() {
return {
version,
}
},
}
</script>安装依赖并修改background.js
shell
npm i electron-updaterbackground.js
diff
+ import { autoUpdater } from "electron-updater"
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
if (!process.env.IS_TEST) win.webContents.openDevTools()
} else {
createProtocol('app')
// Load the index.html when not in development
win.loadURL('app://./index.html')
+ autoUpdater.checkForUpdatesAndNotify()
}通过github实现包的发布
GitHub的个人访问令牌
此步骤需要一个GitHub个人访问令牌。要获取一个,请访问https://github.com/settings/tokens并单击Generate new token。
为了使Electron Builder将发行版本上传到GitHub,您需要通过将GH_TOKENenv变量设置为令牌来使令牌可用:
在Linux / MacOS上:
shell
export GH_TOKEN=TOKEN-GOES-HERE在Windows上:
shell
[Environment]::SetEnvironmentVariable("GH_TOKEN","<YOUR_TOKEN_HERE>","User")
# 例如 [Environment]::SetEnvironmentVariable("GH_TOKEN","587f5a354934f73b8336d81d0168423075f37833","User")TIP
注意设置完环境变量后一定要重启你的编辑器或者powershell以便让环境变量生效
配置vue.config.js
js
module.exports = {
pluginOptions: {
electronBuilder: {
builderOptions: {
publish: [
{
provider: 'github',
owner: 'artiely',
repo: 'electron-updater-demo',
// token: '587f5a354934f73b8336d81d0168423075f37833'
},
],
},
},
},
}TIP
如果不是vue项目可以直接再package.json文件中加入如下内容,参数基本一致
json
build:{
publish:[]
}build参数讲解
js
{
publish:[
// giuhub
{ // 供应商
provider: 'github',
// 项目名
repo: 'electron-updater-demo',
// 拥有者
owner: 'artiely',
// 此处也可以填写token但是不建议使用,你的token会有泄漏的风险,推荐使用上面环境变量的方式。
// token: '587f5a354934f73b8336d81d0168423075f37833'
},
// 普通服务商
{
provider: 'generic',
url: 'https://bucket_name.s3.amazonaws.com',
},
]
}供应商支持多种上面示例了最常见两种,本实例以github为例
发布版本到github
shell
npm run electron:build -- -p always发布打包时很慢的解决办法
在发布的时候可能会遇到一直 dwonloading 一些资源下载不下来的问题。 在downloading后面会有一个链接,点击链接将内容下载到本地
windows系统进入到C:\Users\Administrator\AppData\Local\electron-builder\Cache资源管理目录 新建文件夹
将下载的名称相匹配的放入对应的文件解压
再次执行
shell
npm run electron:build -- -p always另一个新的资源下载也很慢,同样的方法,把他们都加入缓存,下次打包就直接走缓存了,会非常的快。
发布
发布github成功后会在release多一个草稿,点击edit并发布,他将会会变成最后的稳定版 

下载

修改版本号再次发布
修改package.json的版本号再次重复上面的步骤。 再次打开下载的app,会通知你有更新,并且在你下次打开时更新。 
后续
我们会发现这个更新很简陋,后面我们会自定义优化的提示信息,下载进度等。