ReactNative系列之⼗九metro-bundle主要api简介及优化打包
实现
1.RN的打包bundle概要
从ReactNative的0.50(准确来讲应该是0.4x)之后到⽬前的最新版本0.55版本,都使⽤metro-bundle来进⾏压缩打bundle⽂件。实际上打bundle的好处有⼏个1.100个⽂件打包成⼀个⽂件,jsCore加载时效率相对⾼很多2.经过打压后,通过精简算法把总体⽂件变⼩,从⽽降低整体apk的体量
2.Bundle⽂件的介绍
bundle⽂件其实没那么神秘,就是⼀个String,可以让jsCore 识别。那么bundle⽂件主要有⼏部分,1.ReactNative预加载的部门,⼀般在bundle的最开始部分。2,__d开头的⽂件,⼀般为每⼀个js⽂件或资源⽂件,将其封装成⼀个module对象,并进⾏标号。3.bundle⽂件尾部指定⼊⼝⽂件,如require(59); require(1000), 59可以到是InitializeCore,这个加载了js-c++-java三层的通信注册类,通信临听类
等,,,Appregistry,,,registerLazyCallableModule,,setGlobalHandler,,等是不是很熟悉?如果不熟悉,你还不了解RN的通信
reactnative开发3. Metro-bundler的主要api
4、拆包优化思路
1)为什么要拆包,上层业务模块很多,抽像⼀个基础模块,所有模块被拆为N+1个bundle包,N是业务模块
2)metro-bundle把每⼀个module对应了⼀个moduleID, 每个⽂件require时也指向了这个moduleId,所以我们可以将所有的业务模块+基础模块都进⾏编号,⽐如把common模块设置成0-1000, 第⼀个业务模块为1001-2001,依次⽽定。然每⼀个业务模块包打出来后,再将基础模块的bundle包使⽤comm命令⽐对分开。
3)还有⼀个细节,如果common包增加新⽂件,有可能moduleID就混乱了?造成上层所有的业务模块指向的common中的module⽂件混乱?我们可以在打包时将打过的module⽂件和moduleID记录成⽂件保存下,以后再⽣成bundle⽂件时再指定原有的moduleId,对common中新加的⽂件再分配新的moduleId,然后再记录就成了。这样就可以使common的bundle,与业务的bundle升级灵活,不会造成什么依赖!
后续会在github上放源码,欢迎关注

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。