在准备进行测试和部署前,需要准备一下发布所需要的各种资源。
如果已经申请了 hybridId ,可直接转到git仓库配置。
hybridId 是项目的标识,在客户端中启动某个项目、在发布系统中发布某个项目,均需要使用 hybridId 来标识。
申请 hybridId ,参见Wiki。
在项目创建过程中,通过qrn init
命令创建的项目,会在项目的根目录中存在如下几个文件:
如果你的项目是手动创建的,确保你的项目中存在以上几个文件。如果没有,可以在这里下载到模板文件,复制到项目的根目录。
修改index.yaml
文件,来决定项目的发布目标。一个 RN 项目的index.yaml
文件内容如下:
hybridid : template
iOS_vid : vid_80019999 # 所需iOS客户端最低版本
android_vid : vid_60009999,com.mqunar.react_2 # 所需android客户端及模块最低版本
rnpackage : true
hybridid
的值为项目申请到的 hybridId 。iOS_vid
的值为本次发布所适用的 iOS 客户端版本。该版本及更新版本的客户端均可以在代码发布后更新到此次发布的代码。android_vid
的值为本次发布所适用的 android 客户端及模块版本。该版本及更新版本的客户端均可以在代码发布后更新到此次发布的代码。需要向 git 仓库中提交的文件包括以上提到的文件,项目的其他源文件,以及node_modules
目录。
为什么要提交
node_modules
?
因为项目中可能会写入各种各样的其他依赖,而它们的版本可能不固定,因此在发布机上进行npm install的结果可能与开发时不同,会导致编译结果出问题时难以排查。因此我们要求开发者提交node_modules
目录。
RN Job 现在可以自助创建了~ 直接在万事屋自助创建即可,APP类型选择 ReactNative 前端。
联系 CM 创建 RN 前端项目的 job ,需要提供 hybridId 、 git 仓库地址,即可创建项目的发布 job 。这个 job 将用于项目的测试和发布。
RN job 的主要参数如下:
在 job 中进行 beta 发布后,可以在客户端中通过设置 RN 为 beta 加载模式来进行 beta 测试。方法如下:
这种 beta 测试直接由机器向 beta 机器拉取发布结果,需要机器能够访问网络(不需要内网访问)。
每次在 job 中进行发布,会生成一个 qp 格式的发布产物,可以在发布记录中点击查看。
qp 是客户端使用的离线资源包,将 qp 包加入客户端的资源中后,无需联网即可使用发布后的代码。在发布完成后,点击发布的产物链接,可以看到build.qp.ios
和build.qp.android
两个目录,分别对应两个平台的资源包。将各平台目录下 扩展名为qp
和qpmd5
的文件 加入到 Native 工程的资源列表中,随客户端打包即可。
客户端在测试时,需要按照beta 测试(在线)中的流程,设置代码的加载方式为“release”。
注意: 由于 beta 版本的离线包版本号与 prod 的版本号是分别计数的,因此如果你在 native 项目里加入了 prod 的打包产物,则在安装之前,请删除之前安装的 beta 版本,再继续安装应用。否则客户端将使用已经保存的高版本号的包。
如果你的项目是针对 Qunar 的 iOS 大客户端,你可以不必手动加入 RN 资源文件到 bundle 中,而由所在业务线的 lib 在打包时自动完成。(感谢 CM 的大力支持)
在业务线 lib 发布时,可以填写rn_config
参数,在打包时自动将发布的 RN 资源加入。具体格式如下:
hybridIdA:b-160504-102734-xxx.yyy
hybridIdB:master
冒号后面填写 tag 时,使用对应 tag 的内容;填写分支时,则使用对应分支最新一次发布的内容。
如果你所在的业务线的 lib 没有这样的打包参数,请联系 CM 进行修改。
得益于直接使用 hybrid 的发布系统, RN 直接支持代码的热发布。只要在 job 中进行项目的 prod 发布,对应版本的客户端即可在再次进入客户端后更新到新版本的代码。有关如何确定热发的目标版本,参考准备index.yaml文件。