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 相关文章推荐
初窥JQuery(一)jquery选择符 必备知识点
Nov 25 Javascript
js分解url参数(面向对象-极简主义法应用)
Aug 09 Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
Dec 02 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
Aug 24 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
微信小程序之ES6与事项助手的功能实现
Nov 30 Javascript
js原生代码实现轮播图的实例讲解
Jul 28 Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 Javascript
webpack之devtool详解
Feb 10 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 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
第三节--定义一个类
2006/11/16 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
微信小程序开发探究
2016/12/27 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
Python入门_条件控制(详解)
2017/05/16 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python将视频转换为全字符视频
2019/04/26 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
上海微创软件面试题
2012/06/14 面试题
会计专业自我鉴定范文
2013/10/06 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
一年级学生评语
2014/04/23 职场文书
班主任评语大全
2014/04/26 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
天那边观后感
2015/06/09 职场文书
Django drf请求模块源码解析
2021/06/08 Python
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android