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的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
纯JS实现的批量图片预览加载功能
Aug 14 Javascript
JavaScript及jquey实现多个数组的合并操作
Sep 06 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
Jan 13 Javascript
JQuery球队选择实例
May 18 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
IE6兼容透明背景图片及解决方案
Aug 19 Javascript
学习javascript面向对象 理解javascript原型和原型链
Jan 04 Javascript
前端js弹出框组件使用方法
Aug 24 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
小程序自定义组件实现城市选择功能
Jul 18 Javascript
详解JavaScript中的强制类型转换
Apr 15 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
解析zend Framework如何自动加载类
2013/06/28 PHP
php分页示例分享
2014/04/30 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Django实现分页显示效果
2019/10/31 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
毕业寄语大全
2014/04/09 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
公务员政审个人总结
2015/02/12 职场文书
教师学期末个人总结
2015/02/13 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android