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 相关文章推荐
一段批量给页面上的控件赋值js
Jun 19 Javascript
js onkeypress与onkeydown 事件区别详细说明
Dec 13 Javascript
JS实现模拟风力的雪花飘落效果
May 13 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
Aug 28 Javascript
Javascript 计算字符串在localStorage中所占字节数
Oct 21 Javascript
bootstrap下拉列表与输入框组结合的样式调整
Oct 08 Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 Javascript
Node.js笔记之process模块解读
May 31 Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
详解vue中this.$emit()的返回值是什么
Apr 07 Javascript
微信小程序云开发如何使用npm安装依赖
May 18 Javascript
JavaScript实现两个数组的交集
Mar 25 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
php 归并排序 数组交集
2011/05/10 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
在Python中使用SQLite的简单教程
2015/04/29 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
详解python编译器和解释器的区别
2019/06/24 Python
django中的图片验证码功能
2019/09/18 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
物业保安员岗位职责制度
2014/01/30 职场文书
小学生差生评语
2014/12/29 职场文书
教师党员自我评价范文
2015/03/04 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技