最近需要上线app,所以需要对cordova热更新的整个流程整理下,防止出现问题,
项目的结构大致如下:
一个是vue开发的工程叫Vue-mobile,一个是cordova打包app的工程叫Cordova-app
Vue-mobile工程:
Cordova-app工程:
cordova-app工程中的www文件夹里面的html等文件是软链接的Vue-mobile工程中的dist文件夹的
链接方法:比如这两个工程都在桌面上
cd /Users/mac005/Desktop/Cordova-app
ln -s ../Vue-mobile/dist ./www
好了工程准备好了,接下来正式来搞热更新了。
热更新准备工作如下:
1,Vue-mobile工程中生成cordova-hcp.json文件,内容如下:
{
"name": "iplay",
"update": "now",
"min_native_interface": 2,
"content_url": "http://app.xiaoyu.cn"
}
name:就是一个标示,没什么作用
update:是更新的策略now就是立即更新,或者resume,就是app杀死重新打开后更新等等
min_native_interface:是app的版本必须是2及以上才会热更新
content_url:需要热更新的html页面真正放置的地方这里是放在了http://app.xiaoyu.cn服务器上了
2,Vue-mobile工程需要打包出html等文件到dist以供打包,正常就
npm run build
就可以了,但这里需要支持热更新,需要多执行一条命令
cordova-hcp build dist
上面这条命令的主要作用是把Vue-mobile工程中cordova-hcp.json文件中的信息copy到dist文件夹中的chcp.json文件了,并且在chcp.json文件中添加了release版本时间,如下:
{
"name": "iplay",
"update": "now",
"min_native_interface": 2,
"content_url": "http://app.xiaoyu.cn",
"release": "2018.05.07-17.48.31"
}
同时生成chcp.manifest这个文件(chcp.manifest文件主要是摘要文件,记录变更了哪些内容的,app本地放一个,后台放一个)
如果觉得麻烦,每次都要执行两条命令的话,可以在webpack中配置下,每次npm run build,就自动做上面的操作也行,我们项目中也是这么做的。如果不清楚
cordova-hcp.json这个文件怎么来的参考
3,将刚刚生成的dist文件整个内容放在http://app.xiaoyu.cn根目录下,能够http://app.xiaoyu.cn/访问到里面的内容
4,Cordova-app工程中需要在config.xml中配置
<chcp>
<auto-download enabled="true" />
<auto-install enabled="true" />
<native-interface version="2" />
<config-file url="http://app.xiaoyu.cn/chcp.json" />
</chcp>
native-intetrface指的是当前app的版本号,热更新有要求app外壳的版本号的,如果不符合要求的版本号是不会热更新的
config-file中的url:对应的就是上面生成的chcp.json,只不过这个chcp.json现在是放在http://app.xiaoyu.cn服务器上的(这样做简便,正常可以将chcp.json放在另一台服务器的专门对应于app的config-file中的url,然后chcp.json中的content_url真正地指向页面)
接下来走下热更新流程:
1,用户打开app,Update loader从config.xml中取config-file配置(一个url),并从此url载入一段json配置,然后把这段json配置中的release版本和当前app已经安装的进行比较,假设不同,进入下一步
2,Update loader使用刚刚下载下来的json配置中的content_url,去载入清单文件manifest(原理:将本地app中的mainfest文件中的hash值一一与下载下来的manifest中的hash值做比较,如果不同就说明文件改变了),它会找出自上次升级以来哪些文件需要更新。
3,Update loader从content_url(下载下来的json配置中的content-url)下载更新文件(只会去下载并更新manifest中变化的的文件部分)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)