具有以下功能:
- 创建依赖于CRN框架的模板工程
- patch功能,一键修复React-Native源码中已知的一些bug
- 一键编译代码,自动打开开发的RN页面,包含Android平台和iOS平台
安装 crn-cli
开发环境需要安装crn-cli工具,执行以下命令安装,即可得到全局可运行工具crn-cli
npm install @ctrip/crn-cli -g --registry=http://npm.dev.sh.ctripcorp.com:8001
或者
cnpm install -g @ctrip/crn-cli
创建工程
通过以下命令可以构建一个简单的工程,其中init后需要添加所需要构建的工程名称
crn-cli init
<
ProjectName
>
说明:
- crn-cli创建过程与官方创建过程基本一致,不同在于没有生成android、ios工程文件,并添加CRN工程的一些文件;
- 由于CRN工程都依赖于携程主APP,相应的效果验证都需要运行在携程主APP中,因此省去了两个平台的工程文件即不生成android、ios工程文件,相应效果验证下文有介绍;
生成main.js文件,携程ReactNative工程都需屏蔽掉android、ios的Api调用差异,相应component、module等的调用方式、产生效果都保持一致,因此只需要写一份JavaScript代码,index.android.js与index.ios.js都依赖于main.js;
'use strict'; require('./main'); module.exports = Example; //MCD打包需要,必须将component exports
对package.json文件做了相应修改,添加了依赖的携程APP版本号和快速运行脚本
"appVersion": "6.18", ... "scripts": { "start": "crn-cli start", "android": "crn-cli run-android", "ios": "crn-cli run-ios" },
新工程所依赖的RN版本需与基础crn库所依赖的RN版本保持一致,增加的脚本命令,使用便捷,相应运行效果也对官方配置做了调整;
crn-cli工具需要保持和crn框架同步,因此增加了强制更新,更新命令为:
npm uninstall @ctrip/crn-cli -g & & npm install @ctrip/crn-cli -g --registry=http://npm.dev.sh.ctripcorp.com:8001
运行工程
在相应CRN工程目录下,执行以下命令可以运行已创建的CRN工程, 启动bundle下载服务
crn-cli start
<
port
>
启动bundle服务,并在Android手机中打开携程APP并运行当前CRN工程
crn-cli run-android
crn-cli run-android
<
port
>
<
query
>
<
app-version
>
<
ip
>
启动bundle服务,并在ios模拟器中打开携程APP并运行当前CRN工程
crn-cli run-ios
crn-cli run-ios
<
port
>
<
query
>
<
app-version
>
<
ip
>
<
simulator
>
相关参数说明:
--port 可修改服务端口,默认5389
--query 传入启动bu的相应参数,形式为:key=value
&
key2=value2
--app-version 启动相应的APP版本
--ip 获取到的ip可能不是使用者所需,因此此处可指定本机ip
--simulator 可指定打开的模拟器,默认为iPhone 6
使用注意事项:
1. 以上命令所列出的参数都是可选择项,不填工具会使用默认参数,如node服务端口会默认使用5389等;
2. 运行crn-cli创建的工程,会在工程根目录下生成tmp临时目录,该目录不会被git提交,如需重新初始化工具,删掉tmp目录即可;
crn-cli其他命令
crn-cli --version //输出当前工具版本与依赖的RN版本
crn-cli -v //输出当前工具版本与依赖的RN版本
crn-cli --help //具体命令的帮助文档
crn-cli -h //具体命令的帮助文档
使用CRN-CLI的收益
使用crn-cli脚手架工具开发App,具有以下好处:
- 对官方创建APP过程进行了调整比如默认使用携程npm源、安装@ctrip/crn依赖、工程结构修改、添加快捷脚本命令等等,从而可以快速构建APP工程;
- 开发过程中相应的服务部署、APP安装、效果验证,可以一条命令搞定,高效、快速;
- 由于工具仅仅只是对官方工具的整合,因此相应开发、调试、平台支持都与官方保持一致,没有影响;