我在使用webpack的时候,多次用到一个函数,就是tree-shaking(树摇动),这个名字很形象。在webpack模块或未运行的代码的打包过程中不会使用该函数。一、模块引入方案在介绍tree-shaking的实现原理之前,我们先来看几种主流的模块引入方案:AMD方案CMDcommonjses6Module主要看后两种:commonjs:es6modulees6Module和commonjs的主要区别是1.ES6模块输出一个值的引用,而CommonJS输出值的副本2.ES6Module在编译时执行,而CommonJS模块在运行时加载3.CommonJs是单个值导出,而ES6Module可以导出多个4.CommonJs是判断可以写的动态文法,ES6Module静态文法只能写在顶层ES6Module最大的特点是静态的,可以在编译时判断模块的依赖关系,以及输入输出的值,这意味着模块的依赖关系是确定的,与运行时的状态无关,可以进行可靠的静态分析。正是基于这个基础,Tree-Shaking才成为可能:tree-shaking依赖于ES6module的静态分析2,tree-shakingtree-shaking的功能主要有两个作用:按需加载,即不被引用的模块不会被打包进去;killingunusedmodulesafterloading和killingunusedcodesinloadedmodulestree-Shaking实现原理:tree-shaking=ES6odule(non-default)+UglifyJS其中es6module通过对模块的静态分析找到未引入的模块和引入但未使用的模块;UglifyJS实现查杀导入模块中无用代码参考:https://www.ruanyifeng.com/bl...
