webpack的tree shaking的实现方法


Posted in Javascript onSeptember 18, 2019

webpack的tree shaking

util.js

export const a = () => {
 console.log("a123456方法");
};
export const b = () => {
 console.log("b123456方法");
};

main.js

import {a} from './utils';
a();

sideEffects

一般而言,上述代码,在 webpack 进行 tree shaking 能够不打包 function b 的代码,这是因为 webpack 对代码进行了分析, b 没有引用不会打包。

但是npm包中,通过这种方式去引用,你会发现 tree shaking 并没有生效, 这是因为webpack无法识别你的代码是否存在副作用,故而无法执行tree shaking ,解决方法是给你的npm包 package.json 加上 sideEffects: false ,告诉webpack是无副作用的, webpack 可以放心处理。

什么是副作用( side effect ),即你的函数会对外部变量造成影响,比如

function a() {}
a.location = window.location
a.location.hash = 'll'

这就是一个副作用函数,所以编写纯函数

es6

如果你的npm包使用了es6的特性,比如类,最终你打包出来的代码只打包了成了es5的,那么恭喜你,基本上你的npm包和 tree shaking 无缘了。

es6转es5(babel),会产生大量的副作用,所以基本上大部分包都提供es6版本的代码, tree shaking 交给你本地的webpack去处理。

当然也不是完全没有办法,antd老大哥就开发了一个babel-plugin-import,实现精确引用的代码的方式,但是你必须将每个模块单独分成一个文件。

总结

基本上tree shaking的解决方法就是导出es6模块,同时标明自己是无副作用的,如果加上babel-plugin-import就更完美了

rollup的一个提案蛮有趣的!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
js取滚动条的尺寸的函数代码
Nov 30 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
Jul 02 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
javascript性能优化之事件委托实例详解
Dec 12 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
详解Node.js项目APM监控之New Relic
May 12 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
Mar 07 Javascript
js实现窗口全屏示例详解
Sep 17 #Javascript
js实现简单页面全屏
Sep 17 #Javascript
js模拟F11页面全屏显示
Sep 17 #Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
Sep 17 #Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 #Javascript
Cordova(ionic)项目实现双击返回键退出应用
Sep 17 #Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
Sep 17 #Javascript
You might like
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
Prototype Selector对象学习
2009/07/23 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
python二分查找算法的递归实现方法
2016/05/12 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
Python 函数返回值的示例代码
2019/03/11 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
师范生实习个人的自我评价
2013/09/28 职场文书
2013年高中生自我评价
2013/10/23 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript