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的trigger和triggerHandler的区别示例介绍
Apr 20 Javascript
jQuery设置和移除文本框默认值的方法
Mar 09 Javascript
javascript中call和apply的用法示例分析
Apr 02 Javascript
js 获取经纬度的实现方法
Jun 20 Javascript
jQuery实现的放大镜效果示例
Sep 13 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 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记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
django 发送手机验证码的示例代码
2018/04/25 Python
python实现在线翻译功能
2020/03/03 Python
Keras 使用 Lambda层详解
2020/06/10 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
企业行政文员岗位职责
2013/12/03 职场文书
高中语文教学反思
2014/01/16 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
有关环保的标语
2014/06/13 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
通知函格式范文
2015/04/27 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
python 网络编程要点总结
2021/06/18 Python
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
零基础学java之循环语句的使用
2022/04/10 Java/Android
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android