1、增量编译
增量编译在这里指的是:打过一次js包后,后面再打包就会基于上次的打包基础打包。这里的基础指的是moduleId的map。crn-cli使用的是数字来代表module,rn_common包生成的文件都是0.js 1.js 2.js 3.js.... 业务包生成的文件都是666666.js 666667.js ..... ,而这些数字在rn中并不是固定的,比如在一次打包中rn_common包的288.js文件代表的是Button.js,这个过程中我们在RN框架代码中新增或者删除一个module,下次打包的时候rn_common包时288.js代表的是Alert.js。在业务包中是以id来require 模块的,这就会导致本来引用的是Button,却变成了Alert,这个时候就需要把所有的业务包全部重新打包,这对于携程有上百个业务包的情况是非常不友好的。增量编译能让之前已经打包的模块id保持不变,因此crn-cli必须支持增量编译。
这里要吐槽以下,这个理论上将不能算增量编译,因为js代码本来就没有编译一说,应该叫做增量打包。我话讲完,
2、原理很简单
如果需要增量打包,那就把每次打包新增的module和id对应关系保存到一个文件,下次打包的时候再根据这个文件取出id复用。
//baseMapping.json
[
{
"id": 0,
"path": "/crn_common_entry.js"
},
{
&#