rollup打包就是:从入口文件出发,找出所有它读取的变量,找一下这个变量是在哪里定义的,把定义语句包含进来,而无关的代码一律抛弃,得到的即为我们想要的结果。
webpack的tree shaking原理:
先标记出模块导出值中哪些没有被用过,然后使用 Terser 删掉这些没被用到的导出语句。
- Make 阶段,收集模块导出变量并记录到模块依赖关系图 ModuleGraph 变量中
- Seal 阶段,遍历 ModuleGraph 标记模块导出变量有没有被使用
- 生成产物时,若变量没有被其它模块使用则删除对应的导出语句
rollup是找哪些是需要的,webpack是找哪些是不需要的。