1 前言
React Native 0.63 已经发布,为我们带来了一些非常令人兴奋的新功能的同时,也让人头疼的,因为升级它并不是那么容易。
尤其是遇到大版本更新,JavaScript、iOS 和 Android 三端的配置构建文件都有非常大的变动,有时候三者的配置文件又互相耦合在一起,往往牵一发而动全身。
如果还想做完美兼容旧版升级,那更是难上加难啊。去哪儿刚刚结束 0.63 的升级, 这里就来分享下升级的过程吧。
2 QRN 是什么?
react-native 目前是去哪儿网跨端最佳方案,已是去哪儿网客户端的主要技术栈. qrn-js 是在 react-native 基础上开发的一个专属于去哪儿的 rn 框架。
qrn 的核心功能包括但不限于对 rn 原生的代码修改加工,兼容双端的组件和 api,自定义的组件和 api 等。
同时也支持 Redux,webx 等功能。QRN 现可支持全业务线开发,已成为去哪儿大前端的关键一环。
在业务线如此繁多的情况下,为了业务之间解耦,我们将 JS 端划分成 N 个业务包和一个框架包,业务包和框架包有各自的打包脚本,每个业务包也都可以独立发布。
一个完整的 js 环境都是由各个业务线的业务包加框架包组成,互不干扰。但是如果每一个业务包都依赖不同版本的 qrn-js,这就会产生多份重复的 qrn-js 代码。
为了防止这种情况的发生,我们将 qrn-js 内置的到客户端中,跟随客户端版本发布。当启动一个项目时,客户端会先加载内置的 qrn-js,然后再加载业务 js。
这样业务包内就可以没有任何 qrn-js 代码了。
3 为什么这么麻烦还有更新?
为什么要定期更新 React Native?主要如下:
- 可以获得所有最新的性能改进
- 提高健壮性和稳定性
- 可以使用新的 API 和功能
- 紧跟最新的重大变化
考虑到这些,还是有必要定期更新的。下面看下这次我们兼容升级的主要过程吧:
4 更新内容
我们先是通过翻阅61到63所有版本的更新日志和 commit,将其收集归类,再经过评估后,整理出本次升级需要着重关注的更新。以此来确定更新影响范围和制定兼容方案。我们将内容整理到 wiki 上,也可让各业务线开发快速了解更新内容。
这里就挑了几个更新拆解说明一下。
提高开发调试效率
全新的错误提示框 LogBox 这个新的 Logbox 的体验要比之前的好上很多,之前的调用栈很难读,基本上都是靠错误信息来分析错是什么。特别是组件内报错,因为没有页面栈,经常要花上好一会时间来定位。
在新的 Logbox 中得到了很好的改善,如果是组件内报错 l