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 相关文章推荐
Web版彷 Visual Studio 2003 颜色选择器
Jan 09 Javascript
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
js 创建快捷方式的代码(fso)
Nov 19 Javascript
BootStrap扔进Django里的方法详解
May 13 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
js与applet相互调用的方法
Jun 22 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
Jan 05 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
Jan 16 Javascript
JavaScript基础心法 数据类型
Mar 05 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
Feb 14 Javascript
Vue+Vant 图片上传加显示的案例
Nov 03 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输入流php://input实例讲解
2015/12/22 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python运行时间的几种方法
2016/06/17 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python实现矩阵打印
2019/03/02 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
大专计算机个人求职的自我评价
2013/10/21 职场文书
土建资料员岗位职责
2014/01/04 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python