1、CRN开源
CRN是由携程无线平台研发团队基于React Native框架优化,定制成稳定性和性能更佳、也更适合业务场景的的跨平台开发框架。CRN是一整套框架,包含了拆包、加载流程框架、UI框架、平台统一框架,CRN的初衷是提升RN页面加载速度,在不断地优化后形成了CRN框架。因此性能是CRN的核心,而需要做到性能优化,就离不开CRN的根本——拆包。
本次CRN开源的主要是性能优化部分, 也是规模化使用RN进行业务开发必须要做的优化。其内容包括以下:
- 打包支持框架和业务代码拆分
- 支持框架代码后台预加载
- 打包支持增量编译(同一模块,两次打包模块ID不变)
- iOS&Android统一一套打包产物
- 首屏加载性能统计
- LazyRequire
所有的功能都是跟拆包密不可分,我自己也在CRN之前开源了一个拆包工具https://github.com/smallnew/react-native-multibundler,而CRN的拆包工具的名字叫crn-cli,在实现方式上两者有明显的不同,后面我会分几个部分解析crn-cli源码,并提出一些注意事项
2、CRN-CLI的PATCH
有别与基于metro配置打包的react-native-multibundler,CRN由于有更多的定制功能,metro的配置根本不够用,因此crn-cli使用了patch方式直接修改了Metro、RN的源代码。打包的时候控制台会有以下的log:
crn-cli pack
[crn-cli]: remove publish
[crn-cli]: begin build...
成功替换< /Users//Works/learn/CRN/crnprj002/node_modules/metro/src/shared/output/RamBundle/crn-as-assets.js >文件
成功替换< /Users//Works/learn/CRN/crnprj002/node_modules/metro/src/shared/output/crn-bundle.js >文件
成功替换< /Users//Works/learn/CRN/crnprj002/node_modules/metro/src/lib/createModuleIdFactory.js >文件
成功替换< /Users//Works/learn/CRN/crnprj002/node_modules/metro/src/shared/output/RamBundle/as-assets.js >文件
成功替换< /Users//Works/learn/CRN/crnprj002/node_modules/metro/src/shared/output/bundle.js >文件
成功替换< /Users//Works/learn/CRN/crnprj002/node_modules/metro/src/ModuleGraph/worker/collectDepen