自己动手开发更好用的markdown编辑器-06(自动更新)
上一篇我们实现了粘贴上传图片功能.
今天将实现自动更新的功能,有了这个功能以后我再发博客就不需要每次都把最新的程序重新打包上传了.
对于不想看如何实现的朋友,直接下载打包好的程序就行,以后更新可以点击软件右上角的第一个按钮即可(手动).
自动更新方案
在做上一个软件Gungnir的时候,为了可以显示更新进度,自动更新的方案是列出所有需要更新的文件,然后自动下载每个文件并覆盖,但是在需要更新一些node模块(文件一般都很多)时就相当麻烦了,有一个文件传输失败就会导致更新出错.实现起来相当麻烦,而且也并不能带来什么优势.
所以做这个软件的自动更新的时候,我用了更为简单粗暴的方案:将需要更新的文件打包成zip文件,直接下载并解压覆盖即可.
实现
自动更新作为较单独的功能模块,我把全部代码放在modules/updater.js,这里就不把全部代码贴出来了,需要的自己点链接看,里面有注释. 我只讲一些实现细节.
安装依赖模块
首先是安装两个新增了的node模块依赖when和bufferhelper,第一个是promise模块,第二个看名字就知道,无须解释.
1 |
npm install when --save |
1 |
npm install bufferhelper --save |
将7z.exe放到软件根目录备用
自定义package.json
增加了updater配置节点,配置最新的版本号version和对应的补丁文件地址package,由于我这个软件功能很少,代码并不多,因此我现在每次更新都是包含之前所有补丁的文件打包,加起来也才1m多,这样实现比较简单,只要下载最新的包即可.
1 |
... |
updater.js
updater.js里实现了hmd.updater模块,包含4个方法
1 |
//配置文件,用于判断是否有新版本 |
更新的流程为 : checkUpdate检查是否有更新 > update下载补丁包 > install安装补丁包
get方法里要注意的是下载下来的内容要判断是否经过GZIP压缩,如果是,则要用node自带的zlib解压.
1 |
... |
checkUpdate方法里先下载线上的package.json文件与本地进行比较,如果版本号不一致,则提示用户更新.如果用户选择更新,则下载package.json到本地,然后调用update方法下载补丁
1 |
checkUpdate: function () {
|
update方法下载补丁包到update目录,然后调用install安装补丁
1 |
update:function(packageUrl){
|
install将补丁包通过7z.exe解压覆盖到程序目录,然后提示用户重启软件.
1 |
install: function () {
|
这里我直接用7z.exe,反正也不大,也可以使用一些开源的node压缩模块.
绑定更新按钮
更新模块完成了,现在将功能绑定到按钮上.
先在modules/directives增加新的directivehmdUpdate
1 |
angular.module('hmd.directives', [])
|
然后将index.html上的更新按钮与directive绑定
1 |
<a class="btn rectbtn" href="javascript://" title="点击检查更新" hmd-update>...</a> |
别忘了引用updater.js
1 |
<script src="modules/app.js"></script> |
总结
基本的自动更新的功能比图片上传更为简单,但是今天做的这个功能还有很多细节问题,比如:
- 无法自动删除新版本不需要的文件
- 以后如果程序大了,更新补丁每次都全量打包会导致更新很慢
- 更新后不会自动重启软件.
- 更好的方案是自动根据git的提交信息生成更新列表,并且根据版本号管理.

接下来的计划:
- 云同步.
- 插件机制
- 表情插件.
附件
自己动手开发更好用的markdown编辑器-06(自动更新)的更多相关文章
- 自己动手开发更好用的markdown编辑器-04(实时预览)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/ 程序打包 文章目录 1. 打开新窗口 ...
- 自己动手开发更好用的markdown编辑器-07(扩展语法)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/05/19/hexomd-07/ 文章目录 1. 准备工作 2. 目录语法 ...
- 自己动手开发更好用的markdown编辑器-05(粘贴上传图片)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/28/hexomd-05/ 文章目录 1. 七牛云存储 1.1. 系统 ...
- 自己动手制作更好用的markdown编辑器-01
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im 文章目录 1. 简介 2. 项目结构 3. 程序主界面 4. 拖动窗口 5. app ...
- 自己动手制作更好用的markdown编辑器-03
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/24/hexomd-03/ 文章目录 1. 系统模块 2. 记录上次打开的 ...
- 自己动手制作更好用的markdown编辑器-02
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im 文章目录 1. 工具条 1.1. 样式 1.2. 工具条截图 2. 状态栏消息 3. 文件 ...
- 任由文字肆意流淌,更自由的开源 Markdown 编辑器
对于创作平台来说内容编辑器是十分重要的功能,强大的编辑器可以让创作者专注于创作"笔"下生花.而最好取悦程序员创作者的方法之一就是支持 Markdown 写作,因为大多数程序员都是用 ...
- 用nw.js开发markdown编辑器-已完成功能介绍
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/10/29/hexomd-introduction 文章目录 1. 功能列表 ...
- Markdown编辑器开发记录(二):Markdown编辑器的使用与开发入门
Markdown编辑器的使用与开发入门 在部门做技术分享的时候简单整理了一下手里的资料 1 是什么 1.1 Markdown是一种轻量级标记语言 Markdown是一种轻量级标记语言,创始人为约翰·格 ...
随机推荐
- 20、Flask实战第20天:Flask上下文
Local线程隔离对象 我们知道通过request可以获取表单中的数据.如果是多个用户同时在用网站,而全局request就只有一个,那么Flask是如何分辨哪用户对应哪个请求呢? 这种情况下,就会用到 ...
- 【PKUSC 2015】的一道数学题
有9个人,每三个人中至少有两个互相认识,求证这里面至少有4个人互相认识 PKU官方题解: 引理:二染色K6中一定有同色K3. 证明:考虑某一个点,它一定连出至少三条同色边(不妨设为红边),这三条边连的 ...
- [BZOJ3206][APIO2013]道路费用(最小生成树)
3206: [Apio2013]道路费用 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 568 Solved: 266[Submit][Status ...
- [BZOJ2753]滑雪与时间胶囊
第一问直接把可以走的边连起来bfs一遍即可 第二问可以用类似kruskal的方法,只不过排序的依据应该变为第一关键字为终点高度(从大到小),第二关键字为边权(从小到大),只排序可以走的边 因为同样高度 ...
- [Hybrid App]--Android混合开发,Android、Js的交互
AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- SVN 文件删除及恢复
SVN 文件删除及恢复 在TortoiseSVN管理的项目中删除文件的方法: 1. 在客户端按delete删除(OS中删除,不通过SVN) ● 未提交之前一旦Update则被删 ...
- hdu 1054 Strategic Game(tree dp)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 关于DNS,你应该知道这些
在互联网时代中,如果要问哪个应用层协议最重要的话,我想答案无疑是DNS.虽然我们每天都享受着DNS服务带来的便利, 却对它往往知之甚少.因此本文就来介绍一下DNS协议的工作流程,真正认识一下这个支撑着 ...
- iOS统计项目的代码总行数
如果要统计ios开发代码,包括头文件的,CD到项目目录下,命令如下 ① 列出每个文件的行数 find . -name "*.m" -or -name "*.h" ...
- docker 安装 gogs(go git server) 及问题解决
docker安装gogs 参考官方说明 gogs mysql 支持 运行一个mysql image docker run --name gogs-mysql -e MYSQL_ROOT_PASSWOR ...