目录背景有啥用?实践前置准备打包sideEffects副作用sideEffects的使用优化体积背景 大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shakin
大家平时在查 webpack构建体积优化 ,可能都会查到 tree-shaking 这个东西,很多人看到这个东西,就会把它背下来,用来应付以后面试官可能会问到的情况。
但是,又有多少人去真的了解一下 tree-shaking 呢?自己去实践一下看 tree-shaking 到底起了哪些作用?对于我们的打包体积的优化又有多少呢?
Tree Shaking
中文含义是摇树,在webpack中指的是打包时把无用的代码摇掉,以优化打包结果。
而WEBpack5
已经自带了这个功能了,当打包环境为production
时,默认开启tree-shaking
功能。
util.js
function a () {
console.log('a')
}
function b () {
console.log('b')
}
export default {
a, b
}
main.js
import a from './util'
// 使用a变量,调用文件里面的a函数,不使用b函数
console.log(a.a())
console.log('hello world')
// 不可能执行的代码
if (false) {
console.log('haha')
}
// 定义了但是没用的变量
const m = 1
前面说了webpack5
在环境production
下打包的话,默认开启tree-shaking
,那我们运行npm run build
进行一下打包,看看打包后的代码长啥样:
(()=>{"use strict";
const o=function(){console.log("a")};
console.log(o())
console.log("hello world")}
)();
结论:可以看到打包后,把b函数、不可能执行的代码、定义未用的变量通通都剔除了,这在一个项目中,能减少很多的代码量,进而减少打包后的文件体积。
先来讲讲一个东西——副作用
,是什么东西呢?副作用
指的是:除了导出成员之外所做的事情,我举个例子,下面的a.js
是没副作用的,b.js
是有副作用的:
a.js
function console () {
console.log('console')
}
export default {
console
}
b.js
function console () {
console.log('console')
}
// 这个就是副作用,会影响全局的数组
Array.prototype.func = () => {}
export default {
console
}
有无副作用的判断,可以决定tree-shaking
的优化程度,举个例子:
a.js
但是我不用他的console
函数,那么在优化阶段我完全可以不打包a.js
这个文件。b.js
但是我不用他的console
函数,但是我不可以不打包b.js
这个文件,因为他有副作用,不能不打包。sideEffects
可以在package.JSON
中设置:
// 所有文件都有副作用,全都不可 tree-shaking
{
"sideEffects": true
}
// 没有文件有副作用,全都可以 tree-shaking
{
"sideEffects": false
}
// 只有这些文件有副作用,
// 所有其他文件都可以 tree-shaking,
// 但会保留这些文件
{
"sideEffects": [
"./src/file1.js",
"./src/file2.js"
]
}
当我把sideEffects
设置成true
之后,整个打包体积增加了100k
,说明默认的false
还是有用的。。
以上就是tree shaking对打包体积优化及作用的详细内容,更多关于tree shaking打包体积优化的资料请关注编程网其它相关文章!
--结束END--
本文标题: tree shaking对打包体积优化及作用
本文链接: https://lsjlt.com/news/153631.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0