Tree-Shaking 是什么
项目中,我们需要依赖于某些包进行开发时,并不一定用到了这个包里所有的api,因此在进行打包的时候,并不希望将这些没有用到的api打包到最终的包里去。要做到这种,有两种方式:
- 在项目中按需引入(推荐)
- 使用一些工具帮我们做
tree-shaking就是这样一种工具,它是对 静态代码 进行分析后,shaking掉没有用到的那些api相关代码,像webpack等打包工具早已开始支持
注意上面提到,是对静态代码 进行分析,这也注定了它具有的局限性:
只对import 语句起作用,对require导入不起作用,详细解释如下:
- import 是静态导入语句,只能出现在代码第一层,不能根据代码的执行情况动态导入
- require 是动态导入语句,它可以出现在代码的任意层级位置,比如if语句中,在代码执行完成后才能最终确定要引入哪些东西
由于tree-shaking的局限性,其实我个人建议,在项目中使用按需导入最好,但是如果在每个文件都按需去引入,无疑会有许多重复引用代码,因此可以在项目中可以 专门创建一个文件专门用于导入某个包的相关功能,最后,在其他的项目文件里就只导入这个文件就可以了。