Network Processor Module

    offline-pack-server

    0.1.3 • Public • Published

    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
    • 添加 模块 关闭功能
    • 代码检视和优化

    Install

    npm i offline-pack-server

    DownloadsWeekly Downloads

    0

    Version

    0.1.3

    License

    MIT

    Unpacked Size

    1.18 MB

    Total Files

    25

    Last publish

    Collaborators

    • luoxm