作用

在打包的时候删除掉那些没有用的代码,所谓没有用的代码有三个特性

  1. 代码不可执行,不可到达
  2. 执行结果不会被使用
  3. 代码只会影响到死变量

    原理

    利用了ES6的特点
  • 只能作为模块顶层的语句出现
  • import 的模块名只能是字符串常量
  • import binding 是 immutable的

ES6模块依赖关系是确定的,和运行时的状态无关,可以进行可靠的静态分析,这就是tree-shaking的基础。

缺点

  • rollup只能处理函数和顶层的import/export变量,不能把没有用到的类的方法消除
  • JavaScript动态语言的特性让静态分析比较困难