npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

offline-pack-server

v0.1.3

Published

offline-pack server

Downloads

10

Readme

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