☁️ eros 简易 app 增量更新后端系统。
时间就是金钱,热更新能避免 appStore 的审核,为 app 迭代提供强大动力。
本章内容会与开发者一起在本地构建热更新服务
,开始本章内容前,请再次确保您已经运行起 eros 开发的整套流程,如果需要构建到服务端/自动构建平台上,我们建议您先了解一些后端基础,在尝试构建 热更新
。
如果您之前熟读了我们的入门指南,大概就理解为什么 eros 要做内置包热更新
,这里在列举一下。
相对于 weex 每次都走线上请求最新的 bundle,我们做内置包的设计是考虑到如下场景:
1.发布了新页面。
2.bundle 打包体积。
3.用户在挂号这条业务线中走到了支付这一步,挂号流程改造,支付的时候多加了些参数。
4...
我们还能列出许多相似的场景,不难看出,内置包热更新的设计,更适于纯 weex native 的项目。
安装都比较简单,装到全局即可,不过多赘述。
$ git clone https://github.com/bmfe/eros-publish.git
$ cd eros-publish/server
$ npm i
// eros-publish/server/config.js
module.exports = {
db:'mongodb://localhost:27017/app',
defaultPort: 3001,
staticVirtualPath: '/static',
staticRealPath: '/Users/yangmingzhe/Work/opensource/',
zipReturn: 'diff'
}
db
: 数据库服务地址defaultPort
: 热更新服务默认端口staticVirtualPath
: 静态虚拟地址staticRealPath
: 静态真实地址zipReturn
: 返回包的开关,full
是任何情况下都返回全量包
, diff
则是任何情况下都返回增量包
这里说下 staticVirtualPath
和 staticRealPath
,拿上面例子来说,访问虚拟地址 ('/static') ,其实是访问的真实地址 ('/Users/yangmingzhe/Work/opensource/') 下的资源。
http://localhost:3001/static => /Users/yangmingzhe/Work/opensource/
所以当我们把自己的项目放到 opensource 下,就可以让别人通过/static
访问到你项目中的打包生成好的资源文件 (dist)
。
$ mongod
Robo 3T
可视化工具:这时候会提示你链接到你的数据库,链接即可。
$ supervisor app.js
看到如下界面后:
后端已经调通了。
总共就 3 个接口,需要我们先熟悉一下:
/app/list
GET
/app/add
POST
/app/check
POST
/app/check
中 ios 和 android 二选一。
/Users/yangmingzhe/Work/opensource/
绝对路径下,注意这个就是我上面填写的 staticRealPath
。url.bundleUpdate
,由上面的接口我们能知道,需要 app 进行更新检测的接口是 /app/check
,所以我们填写 http://localhost:3001/app/check
即可pwd
: 每次更新的全量包我们都存放到这个地址,这样每次差分包的生成都会遍历这个路径下的全量包生成,建议无论是在本地还是在服务器上,都先建好这个目录,我这里写我本地的路径一个新建的目录/Users/yangmingzhe/Work/opensource/eros-diff-folder
proxy
: 能被用户访问到的路径,由于上面我们配置了 staticVirtualPath
,这样我们就能在 http://localhost:3001/static/
访问到我们的 eros-demo 项目资源,填写路径为 http://localhost:3001/static/eros-demo/dist/js/
这里需要用到两条指令:
$ eros pack -s url
: 构建全量包,内置到两端成为内置包,并将包信息发送 eros-publish 来记录。$ eros build -s url -d
: 构建最新全量包,遍历 eros.dev.js 下 diff.pwd 历史版本分别生成差分包,并将全量包信息发送服务器差分包 v1-v2 = md5(全量包 v1 md5 + 全量包 v2 md5)
首先我们构建模拟 iOS app v1.0.0 首次发版情况。
<text class="desc-info-2">版本 1.0.0</text>
eros.native.json
里的 version.iOS
为 1.0.0。$ eros pack -s http://localhost:3001/app/add
,打内置包,并记录此版本全量包信息。版本 1.0.0
。版本 1.0.0-build.1
。$ eros build -s http://localhost:3001/app/add -d
来生成差分包。版本 1.0.0-build.1
。至此我们就完成了一次 app 的发布,也就是热更新
。
下面会有同学问,当我 app 逻辑做了变动,升级到了 1.0.1 怎么办呢?
只要理解,我们每次 app 发版都内置最新的 js bundles 给用户就行了,继续以上步骤,app 版本和 js 版本都变为 1.0.1,然后在市场上发布应用,用户下载,就完成了一次客户端跨版本升级。
部署只需要启动数据库,然后通过 pm2/nohup
来部署即可,注意写好上面涉及到的配置。
$ sudo nohup mongod & // 后台运行数据库
$ sudo pm2 start app.js // 后台 node 服务
eros-publish 是一个非常简单热更新服务逻辑,热更新发布最重要的还是要把脚手架和发布系统结合好,eros-publish 虽然是开箱即用,但有一些不足和改进的方向这里也要提一下:
sudo docker-compose up -d