本篇大致概括一下tree shaking的作用以及与webpack相结合使用

什么是tree shaking

引用webpack官网的原文来说:

tree shaking 是一个术语,通常用于描述移除 JavaScript 上下文中的未引用代码(dead-code)。它依赖于 ES2015 模块语法的 静态结构 特性,例如 import 和 export。这个术语和概念实际上是由 ES2015 模块打包工具 rollup 普及起来的。

我们经常能看到一个模块会导出很多个不同的东西,但是实际项目可能并不会全部引用,举个例子:

假设我们有一个工具函数文件utils.js,里面有两个方法,一个是两数相加求和的add函数,一个是我们待会儿不会使用的useless函数。
我们在一个index.js中引入add函数

明显useless是不会被使用的,在打包代码之后,按照我们的意愿,不被使用的代码也就是无用的代码不应当被打包到最终的文件中,因为那样会增加不必要的文件体积,而tree shaking的作用就是将这些无用的代码从“树”上“摇”下去。

webpack怎么配置使用tree shaking

上一章提到,tree shaking依赖于ES模块语法,import以及export
所以开启树摇的前提是该模块需要用ES模块导出并且被ES模块语法引用,像commonJs的导入导出方式是不行的。
development环境,我们将上一章的文件用webpack打包,结果如下:

不管有没有被使用,useless还是被正常打包导出到文件中了。接下来,我们在配置的优化项中加上:

再进行打包得结果如下:

打包结果只导出了add函数,并且将useless标记为未使用的函数,在production环境中打包时,这个未使用的将会被移除,不会出现在打包结果中。production环境下,usedExports默认是开启的。

sideEffects

有些文件导入的时候并不是导入其中的内容作为变量使用,而是直接导入这个文件,用来执行里面的副作用操作,例如:

这个utils中新增一段修改标题的代码,并不导出为什么,然后在index中直接导入:

打包效果如下:

虽然没有通过导入为变量去使用,但是这些副作用代码默认是会被保留的。假设你有明确不需要理会的副作用,或者明确没有副作用,可以设置sideEffects来使webpack按照正常的方式去tree shaking。

这里有两处地方设置sideEffects,具有不一样的意义:
1.config文件中,optimization配置项里可以配置sideEffects,值是bool,生产环境默认是true,代表开启无副作用树摇的功能。
2.package.json文件中配置sideEffects,值有true,false,数组,生产环境默认为true,表示所有的文件都是有副作用的。

当package.json中设置为false,代表所有的文件都没有副作用,可以放心的按照原来的树摇规则,把那些没用到的副作用代码都去除。但是有些时候,我们引入css样式,也是不会去使用变量的方式,这样设置样式也会被摇下去导致不生效。因此需要设置sideEffects为数组形式,匹配需要保留副作用的文件的后缀名,树摇时就会跳过这些文件。

webpack中的tree shaking(树摇)-----移除未使用的代码相关推荐

  1. webpack构建中tree shaking、scope Hoisting(面试题)

    一.tree shaking (摇树优化) tree shaking概念: 1个模块可能有多个方法,只要其中某个方法使用了,整个文件会被打到bundle中 tree shaking 只将用到的方法打到 ...

  2. 前端基础建设与架构11 Tree Shaking:移除 JavaScript 上下文中的未引用代码

    时至今日,Tree Shaking 对于前端工程师来说,已经不是一个陌生的名词了.顾名思义:Tree Shaking 译为"摇树",它通常用于描述移除 JavaScript 上下文 ...

  3. tree shaking 及其工作原理

    写在前面 今天这道题目是在和小红书的一位面试官聊的时候: 我:如果要你选择一道题目来考察面试者,你最有可能选择哪一道? 面试官:那应该就是介绍一下tree shaking及其工作原理? 我:为什么? ...

  4. dce和tree shaking

    dce和tree shaking 为了在弱网环境下降低网络延迟以获取更好的用户体验,我想这些关于如何降低代码体积的技术都是值得研究的.目前降低网络延迟的一个方法是降低js代码的体积,本文研究的就是在压 ...

  5. Webpack中的tree-shaking

    文章目录 Webpack中的tree-shaking 简单实践 副作用sideEffects sideEffects配置项 false 数组 结论 Webpack中的tree-shaking tree ...

  6. demo10 关于JS Tree Shaking

    1.什么是 tree shaking 借助于 es6 (es2015) 模块系统 (import 和 export) 的静态解析,webpack 能够利用 Tree Shaking 进行按需加载,移除 ...

  7. tree shaking(摇树优化)

    tree shaking(摇树优化) 前言 随着js的不断发展,性能优化成了主流的方向,但是如何性能优化又成了现在程序员的一大苦恼,而我作为一名前端小白,也就深陷其中,最近学习到了tree shaki ...

  8. Angular 应用里的摇树优化 - tree shaking

    Tree Shakeable Providers and Services in Angular Angular 最近推出了一项新功能,Tree Shakeable Providers. Tree S ...

  9. Webpack之Tree Shaking与Scope Hoisting

    Webpack之Tree Shaking与Scope Hoisting 一.Tree Shaking 二.webpack中使用Tree-shanking 三.Scope Hoisting 一.Tree ...

最新文章

  1. Activity LaunchMode验证
  2. python下载word文件-python-docx操作word文件(
  3. Sklearn 损失函数如何应用到_Sklearn全复习(下)(持续更新)
  4. LYNC显示用户位置的相关配置
  5. 关于DSP开发的步骤
  6. SAP CRM Fiori my task应用是如何在My Account应用里加载的
  7. java线程的创建与执行_Java多线程的创建和运行
  8. niagara mysql_Niagara AX连接MySQL数据库
  9. RESTful 架构
  10. 《天天数学》连载46:二月十五日
  11. auxiliary variable(辅助变量)的引入
  12. 优惠码:直通BAT面试算法精品课-牛客网
  13. 2010年中国城市人均GDP排名
  14. 专项UI自动化测试 - appium(元素定位方式和思考)|看了就会
  15. Echarts堆叠柱状图显示百分比
  16. 科技爱好者周刊:第 75 期
  17. 【无标题】adsa da das
  18. Cesium 源码解析 Model(二)
  19. drop python_用Python做自己的AirDrop 1 - 环境搭建
  20. Android——excise(用线性布局、表格布局、相对布局做发送邮件界面)

热门文章

  1. python airflow_Airflow 安装
  2. 有关中国服装制造业转型升级的看法
  3. 紧跟数字经济发展脉络 加快推动制造业转型升级
  4. tp3 跨域_tp6 通过全局中间件 解决跨域问题
  5. Harris角点检测
  6. 待业的日子--工作总结
  7. 【算法分析】ABCDE*A=EEEEEE的问题
  8. galeracluster高可用集群安装(mysql)
  9. python数据绘图-折线图(matplotlib.pyplot)
  10. matplotlib.pyplot中figure、subplot、plot、hist的相关用法