前言
Tree-shaking,顾名思义“摇树”。webpack会在生产环境打包时“摇”掉无用的,死的代码,也就是dead code。
由于Tree-shaking主要依赖于ES6的模块化import和export,我们都知道ES6的module只能是顶层出现,和运行时无关,不能运行时加载,Tree-shaking主要就是依靠这个基础进行静态分析,不执行代码就从字面量对代码进行分析。如果是require,需要执行后才知道有没有引用,就无法进行Tree-shaking。
副作用
副作用:一个函数会、或者可能会对函数外部变量产生影响的行为。
具有副作用的文件不应该做 tree-shaking,因为这将破坏整个应用程序。比如全局样式表及全局的 JS 配置文件。
webpack 总会害怕把你要用的代码删除了,所以默认所有的文件都有副作用,不能被 Tree Shaking。
当然,webpack还给了配置参数,sideEffects可以是一个数组,指定文件没有副作用,不需要去过滤没有使用的副作用。话说回来,除非项目真的很严格,不然不建议配置,否则开发的时候没问题,打包之后出问题了,不知道这个配置的很可能会心态爆炸,定位不到问题。
package.json 的配置
// 所有文件都有副作用,全都不可 tree-shaking{"sideEffects": true}// 没有文件有副作用,全都可以 tree-shaking,即告知 webpack,它可以安全地删除未用到的 export。{"sideEffects": false}// 除了数组中包含的文件外有副作用,所有其他文件都可以 tree-shaking,但会保留符合数组中条件的文件{"sideEffects": ["*.css","*.less"]
如果觉得《【tree shaking】Tree-shaking之副作用》对你有帮助,请点赞、收藏,并留下你的观点哦!