webpack之sideEffects

  • 前言
  • 一、sideEffects的使用
  • 二、sideEffects注意事项

前言

webpack4新增了一个sideEffects新特性,它允许我们通过配置的方式,去标识我们的代码是否有副作用,从而为Tree-shaking提供更大的压缩空间。
这里的副作用指的是模块执行时除了导出成员之外所做的事情。
sideEffects一般用于npm包标记是否有副作用。


一、sideEffects的使用

文件结构:


测试文件代码如下:

// components/button.js
export const Button = () => {return document.createElement('button')console.log('dead-code'); // 未引用代码
}// components/heading.js
export const Heading = () => {return document.createElement('h' + level)
}// components/link.js
export const Link = () => {return document.createElement('a')
}// components/index.js
export { default as Button } from './button'
export { default as Link } from './link'
export { default as Heading } from './heading'// index.js
import { Button } from "./components"
document.body.appendChild(Button())

打包,查看效果

未引用代码也被打包了,sideEffects就可以用来解决此类问题。
webpack.config.js新增sideEffects配置


module.exports = {mode:"none",entry:"./src/index.js",output:{filename:"bundle.js"},optimization:{sideEffects: true}
}

开启了sideEffects配置后,webpack在打包时就会先检查当前代码所属的package.json中有没有sideEffects的标识,以此来判断这个模块是不是又副作用。如果这个模块没有副作用,这些没被用到的模块就不会被打包。(这个特性在production模式下会自动开启)

在package.json中配置以下"sideEffects":false

此时再去执行打包,bundle.js中就会清除未引用代码了。

二、sideEffects注意事项

使用sideEffects的前提就是确定你的代码真的没有副作用,否则的话,在webpack打包时,就会误删掉那些有副作用的代码。

例如src目录下有一个extends.js文件

// extends.js
Number.prototype.pad = function(size){let result = this + ""while(result.length < size){result = "0" + result}return result;
}

在index.js中执行这个模块的内容,为Number原型对象上添加一个pad方法。再执行一个公共css代码模块。

// index.js
import { Button } from "./components"
import "./extends"
import "./global.css"console.log((8).pad(3));
document.body.appendChild(Button())

打包效果如下:

extends.js模块和global.css模块都没被打包。因为它们都算是副作用模块,而我们在package.json中声明了没有副作用,所以它们就被移除了。

解决办法就是在package.json中关闭副作用,或者标识以下当前文件中有哪些文件是有副作用的。

"sideEffects": ["./src/extends.js","*.css" ]

此时打包就不会移除标识了的副作用模块了。

webpack之sideEffects相关推荐

  1. css-6 df15,webpack 样式文件的代码分割(15)

    获取全套webpack 4.x教程,请访问瓦力博客 在上一小节,我们将开发环境和生产环境区分开来.这一小节,我们来操作如何将样式文件的代码分割. 1.安装 yarn add mini-css-extr ...

  2. webpack高级应用篇(九):tree shaking(usedExports) 与 sideEffects

    目录 tree shaking(usedExports) tree shaking 前 tree shaking 后 sideEffects(副作用) 解释 tree shaking 和 `sideE ...

  3. webpack二刷之五、生产环境优化(3.sideEffects 副作用)

    sideEffects 副作用 webpack4新增的功能. 允许通过配置的方式去标识代码是否有副作用,从而为 Tree Shaking 提供更多的压缩空间. sideEffects 一般用于开发np ...

  4. 浅入浅出webpack

    准备了挺久,一直想要好好深入了解一下Webpack,之前一直嫌弃Webpack麻烦,偏向于Parcel这种零配置的模块打包工具一些,但是实际上还是Webpack比较靠谱,并且Webpack功能更加强大 ...

  5. 前端每周清单第 49 期:Webpack 4 Beta 尝鲜,React Windowing 与 setState 分析

    前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID: fron ...

  6. webpack从入门到精通(四)优化打包配置总结②

    1. tree shaking tree-shaking的本质是消除无用的js代码.无用代码消除广泛存在于传统的编程语言编译器中,编译器可以判断出某些代码根本不影响输出,然后消除这些代码,这个称之为D ...

  7. webpack打包生成的map文件_从这十几个方面优化你的 Webpack 配置

    目录 开发环境性能优化 生产环境性能优化 开发环境性能优化 优化打包构建速度 HMR 优化代码调试 source-map HMR ❝ 概念:「HMR:」 hot module replacement ...

  8. (六)构建优化(揭开webpack性能优化的内幕)

    构建优化 webpack的优化配置[了解这些优化配置才敢说会用webpack] Tree-shaking JS压缩 作用域提升 Babel的优化配置 webpack的依赖优化 noParse(不解析) ...

  9. 弄懂webpack,只要看这一片就够了(文末有福利)

    什么是webpack ​ webpack是什么,官网中是这么说的. ​ 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webp ...

最新文章

  1. weblogic学习笔记(1)
  2. Android Gradle 笔记
  3. Verilog学习----条件语句、循环语句、块语句与生成语句
  4. Linux下的硬链接和软链接
  5. 【Linux】一步一步学Linux——trap命令(229)
  6. Promise之异步调用
  7. 挖矿区块链_使用Java语言从零开始创建区块链
  8. 项目部署时,linux环境配置问题
  9. 用户修改了信息jwt服务器怎么识别,django使用JWT保存用户登录信息
  10. java chars_为什么在Java 8中String.chars()是一个整数流?
  11. uva live 4394 String painter 区间dp
  12. 高通Camera驱动配置参考:dtsi、代码
  13. 千古兴亡多少事,一江春水向东流--转任总文章
  14. 中南大学计算机学院复试差额录取比例,中南大学在职研究生复试差额比例大概是多少...
  15. [论文解读] A Ranking-based, Balanced Loss Function Unifying Classification and Localisation in Object De
  16. spring boot 多模块项目打包部署
  17. 013 基于truffle的PetShop案例
  18. 【一年一个小知识】如何往kindle阅读器里传书?
  19. [转]SIFT,SURF,ORB,FAST 特征提取算法比较
  20. 抽取文本数据(TSV文件的抽取)

热门文章

  1. 2020年最新Django经典面试问题与答案汇总(下)-大江狗整理
  2. MATLAB常用指令及解释(持续更新中)
  3. 脑洞大开,晚安月亮纸尿裤透气性实验!
  4. matlab 遍历每个像素点,Mat中两种像素遍历方法比较
  5. TI培训——电子电路基础知识讲座(第三章上)
  6. 基于oval注解支持JavaScript表达式约束条件
  7. 文件随机或顺序读写原理深入浅出
  8. VMware虚拟机不能全屏的解决方法
  9. 营地第一天之今天我是伙委
  10. 基于FME的水库功能分区生态红线批量处理方案(从文本到gdb)