博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Electron: 使用Electron Builder分发你应用程序(OSX)
阅读量:5939 次
发布时间:2019-06-19

本文共 2842 字,大约阅读时间需要 9 分钟。

创建安装程序

Electron Builder 主要用来做三件事:

  • 创建应用程序可执行文件(.app)

  • 创建Squirrel更新包(.zip)

  • 创建磁盘镜像(.dmg)

应用程序需要代码签名, 否则自动更新机制不能正常工作. 为了演示这个过程, 我们通过钥匙串创建一个测试证书.

  • 进入「钥匙串访问」程序, 如下图:

clipboard.png

  • 输入证书名称「Electron Auto Update」, 并且证书类型选择「代码签名」, 然后点击「创建」按钮完成创建.

clipboard.png

  • 打包需要用到证书的名称, 设置环境变量, 以在终端中使用这个证书

export CSC_NAME="Electron Auto Update"

最后使用 electron-builder 是, 它会使用这个证书名字, 并用该证书对代码进行签名.

自动更新

Electron 使用 作为底层的自动更新框架. 自动更新过程包含几个步骤:

  • 客户端请求服务器询问是否有新的版本

  • 服务器应答以个JSON文件返回更新信息

  • 客户端对比本地版本和最新版本, 如果有更新执行更新过程.

应用程序

Electron 的主进程模块需要包含 auto-updater 模块.

const autoUpdater = require('auto-updater')

auto-updater 在开发模式下不可用

还可以添加相关事件监听器:

# 更新可用, 可以通过通知系统告知用户有更新可用autoUpdater.addListener("update-available", function(event) {      ...});# 更新下载完成后, 可提示用户重启应用程序autoUpdater.addListener("update-downloaded", function(event, releaseNotes, releaseName, releaseDate, updateURL) {      ...});# 更新错误autoUpdater.addListener("error", function(error) {      ...});# 正在检查更新autoUpdater.addListener("checking-for-update", function(event) {      ...});# 没有新版本autoUpdater.addListener("update-not-available", function(event) {      ...});

下一步, 给 Squirrel 配置更新服务器URL:

# 这里设置更新服务器域名或IP地址const = UPDATE_SERVER = '';var updateFeed = `http://${UPDATE_SERVER}/updates/latest`;  const appVersion = require('./package.json').version;  const feedURL = updateFeed + '?v=' + appVersion;  autoUpdater.setFeedURL(feedURL);

最后一切就绪, 执行检查:

# 可以在每次启动应用程序时检查一次, 并且固定间隔检查一次(比如一周, 依据你的应用程序更新频率)autoUpdater.checkForUpdates();

更新服务器

服务器应答:

  • 200 有更新可用, 并返回JSON更新描述信息

  • 204 无更新

关于更服务器, 有几个, 也可以自己写一个.

electron-release-server 是最简单最好用的一个

~/servers/electron-release-server$ npm start --prod> electron-release-server@1.4.3 start /home/www/servers/electron-release-server> node app.jsWarning: connect.session() MemoryStore is notdesigned for a production environment, as it will leakmemory, and will not scale past a single process.Warning: connect.session() MemoryStore is notdesigned for a production environment, as it will leakmemory, and will not scale past a single process.               .-..-.   Sails              <|    .-..-.   v0.12.13            |\                      /|.\                     / || \                   ,'  |'  \                .-'.-==|/_--'                `--'-------'    __---___--___---___--___---___--___ ____---___--___---___--___---___--___-__Server lifted in `/home/www/servers/electron-release-server`To see your app, visit http://localhost:5014To shut down Sails, press 
+ C at any time.-------------------------------------------------------:: Mon May 01 2017 21:16:24 GMT+0800 (CST)Environment : productionPort : 5014-------------------------------------------------------Destroyed version: { assets: [], channel: 'beta', name: '0.0.2', notes: '第一个升级包', createdAt: '2017-05-01T13:23:01.000Z', updatedAt: '2017-05-01T13:23:01.000Z' }

Window 和 Linux

机制是一样的, 配置过程有差异, 详情参考官方文档, 或Google.

参考资料

转载地址:http://jcttx.baihongyu.com/

你可能感兴趣的文章
Oracle 12C 新特性之表分区部分索引(Partial Indexes)
查看>>
Hibernate利用JDBC批操作
查看>>
delphi中的Label控件背景透明
查看>>
关于闭包的几个小栗子
查看>>
libevent源码深度剖析七
查看>>
CCF201409-5 拼图(30分)
查看>>
HDU4821 String
查看>>
设计一个学生类&班级类
查看>>
响应式网页设计:互联网web产品RWD概念
查看>>
Thinkphp开源框架如何使用?
查看>>
c# 读取记事本txt文档到DataTable中
查看>>
BUAAOO第四单元总结
查看>>
java_分数
查看>>
守护线程与非守护线程
查看>>
Js中parentNode,parentElement,childNodes,children之间的区别
查看>>
JS复习:第三章&第四章
查看>>
webpack的问题;
查看>>
如何用JS获取ASP.net中的textbox的值 js获不到text值,【asp.net getElementById用法】
查看>>
ASP.NET弹出对话框几种基本方法
查看>>
正阳门下
查看>>