hybrid app开发的优势优点不用说了,但在这里,我们将重点关注混合系统中模块包的升级过程。
服务器维护压缩包的版本列表
Apppid 表示每个模块的唯一 ID
版本表示相应模块的版本号,递增
URL 表示相应模块包的最新版本号的下载地址
MD5 表示包的 MD5 值
Ps:的每个模块对应一个 appId,该模块代表 APP 混合 HTML 5 的子元素,一个模块集成了一个应用程序的一类页面函数。每个模块的目录结构如下:
第一步是将前端代码打包到一个压缩包中,并编写一个自动打包脚本
#切换到项目目录
cd erciyuan_h5
#更新最新代码
git pull
cd src
var=$1
var=${var//,/ }
for element in $var
do
#切换到相应模块目录
cd $element
#执行前端webpack打包命令,在css目录和js目录里分别生成template.css template.js
webpack -p
#向服务器获取当前模块的最新版本号
version=`curl "http://hostname/hybirdVersion?appid=$element"`
echo $version
#生成zip包名
module={element}_version
rm -rf $module
#将前端资源文件打包
mkdir $module
cp -r image $module
mkdir ${module}/js
mkdir ${module}/css
mv css/template.css ${module}/css
mv js/template.js ${module}/js
cp -r image $module
cp template.html $module
zip -r
module.zip
{module}
#获取zip包的md5值
md5=`md5sum {module}.zip|awk -F ' ' '{print1}'`
echo $md5
#上传zip包至nos
curl -X POST -F "[email protected]
module.zip""http://hostname/api/v1/upload/webpack/zip?zipId=
{module}.zip"
#更新服务器包管理列表
curl "http://hostname/hybirdStore?appid=1&module={module}.zip&MD5={md5}&v={version}"
#包备份
cp ${module}.zip /home/hzwangbei/package
#删除本地zip包相关文件
rm -f ${module}.zip
rm -rf ${module}
echo -e "\nstop succeed\nDownload Url: http://acs.nos.netease.com/${module}.zip"
done
zip包生成上传后,app就要去更新了,更新协议如下:
App 首先将本地维护的最新模块和版本列表上传到服务器。服务器逐一比较服务器的 zip 包版本号,检测需要更新的 zip 包,并在还原器后将其返回给 APP。
在APP应用程序获得需要更新的 zip 包模块列表后,下载相应的 zip 包,验证 zip 包的 MD5 值,解压缩并重写旧的本地模块,同时更新本地维护的模块版本列表。
大概流程如下: