Skip to content

axe-org/offline-pack-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

offline-pack-server

离线包系统,使用nodejs开发 。 离线包指将一些资源以包的形式下发给APP ,从而优化这些资源的下载和使用方式。 我们可以将 H5资源、React-Native包 、 Weex包 ,甚至安卓的插件都可以通过离线包的形式进行下发, 所以离线包是一种统一的资源下载管理的方式。(简单的比较是,离线包相当于react-native里面的code-push , 只不过我们这里的离线包是从APP角度考虑的资源管理, 而code-push是从react-native开发角度考虑的包管理)

离线包用于管理动态化的资源,所以属于axe系统中的动态化部分。

特性

  • 支持 差分 ,使用 bsdiff
  • 支持 多种下载时机配置
  • 支持 跟随APP打包 (一个资源虽然以离线包的形式管理,我们也可以将其打包后直接放到APP中, 即使一些关键模块在APP安装后即可使用)
  • 离线包可以上传到oss中保存 (目前只支持阿里云)

安装使用

安装

npm install offline-pack-server -g      

使用, 在一个文件夹下,或者指定一个文件夹 ,启动服务 :

offline-pack-server helloworld

然后在 helloworld文件夹下,有一个config.js, 可以进行一些定制。

包的保存

包的保存目前支持两种。

一种是保存在本地文件中, 使用nginx或者offline-pack-server 来分发资源。默认配置就是这样,可以查看配置文件了解详情。

一种是上传到阿里云的oss中,详情查看配置文件。

安全性的讨论

当前管理页面和app的请求是放在一起的, 那如何隐藏管理页面呢 ?

我的建议是,在node前面还是要有一层nginx来控制与转发。 对于管理页面的路径与请求,限定ip,以做到内网才能访问。

通过nginx做权限管理控制的示例 DEMO, 配置

注意事项

包内不要有中文路径和中文文件, 否则会解压出错!!!

配置说明

版本号

包的版本号,建议使用构建号来标记。

APP版本号

限定从指定 APP版本号开始 , 可以使用该离线包。

包跟随APP版本,是因为包内内容可能使用了新版本的APP中才有的接口或功能。 而由于有这个限定,所以对于一个模块,生产上可能同时有多个版本的包。

而这里,我们对包的更新发布做了一定限定 : 新添加的包的版本号必须增加,即会覆盖旧版本内容。 而且我们只维护最新版本APP的上的包,不维护旧有的包。如 :

  1. 一开始发布一个模块A的初始化包,APP版本从0.1开始
  2. 然后更新的版本都是限定 0.1开始
  3. 然后我们使用了新接口,发布了一个不兼容旧版本APP的包, 限定APP版本1.0
  4. 再更新模块A时, 对于模块A就分了两个阶段: 在APP版本 0.1-1.0之间, 和在APP版本1.0以上的部分。
  5. 然后再有需求更新模块A时, 我们说,系统只支持更新最新版本包,不支持继续维护旧包

即这里我们采用APP开发的思路,尽量升级版本,而不是维护旧版本。 在旧版本上维护的花费较大,且大部分用户都是会升级APP的。

更新时机

首先,对于离线包检测的时机是固定的, 启动时, 以及进入前台间隔10分钟。

更新时机指定的是 当APP检测到某个模块有新版本时, 何时进行包的下载。暂时有3个选项 :

  • 立即更新 : 即检测到需要更新时, 立即下载。
  • 按需更新 : 即真正使用到该模块时, 才会下载。
  • WIFI时更新 : 检测时, 如果网络是WIFI状况, 或者 网络变更为WIFI状况时开始下载。 但是 使用模块时,及时没有WIFI也会下载。

默认选项为 WIFI时下载 。

强制更新

指当使用模块时, 是否弹出弹框,以进行离线包的更新。

  • 强制更新 : 目的是确保模块每次运行时,都能保持最新版本。
  • 静默更新 : 会使用旧版本的内容, 但是后台会进行下载更新。 如果当前模块本地没有旧版本, 还是会弹出弹框以下载离线包的。

默认选项是 强制更新, 保持离线包版本最新, 是很重要的。

tag

标签,用于继续细分一个模块的不同包。 如果设置了tag ,则 前端也要设定相应的tag, 才能下载该模块。

主要用于 灰度测试 或者 AB测试, 即一个模块有两个不同版本, 根据业务需求,下发不同的版本给不同的用户。

只能设置一个tag 。 做AB测试时, 必须对命中与不命中的版本都设置tag , 如我们设置一个tag 叫做 hit , 以使用离线包的 11版本, 则对于正常 10版本的离线包上也要设置一个tag ,如设置为 unhit.

默认为 空, 即不设置规则。

TODO

  • 优化 tags 功能 : 支持设置多个tag
  • 添加 模块 关闭功能
  • 代码检视和优化

About

离线包后台管理系统,使用nodejs开发

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published