treeshaking(摇树优化)是打包工具对代码优化的一个重要特性。我们都知道,单独使用 export xxx,如果未被 import {xxx} 或其他模块引用时,代码可以被标记并删除掉。但是对于 export default 却有不同的结果,我们下面就来实践一下。
webpack:5+
vite:4+
export default {f1() {console.log('func1');},f2() {console.log('func2');}
}
function f1() {console.log('--func1');
}
function f2() {console.log('--func2');
}export default {f1, f2}
import treeshaking from './treeshaking.js';
import treeshaking2 from './treeshaking-2.js';treeshaking.f2()
treeshaking2.f2()
从下面输出文件我们可以看到,webpack treeshaking 优化对直接型默认导出写法无效,f1 函数还是被保留了,而第二种 default 写法则有效,f1 函数被删除优化掉了。
从下面输出文件我们可以看到,vite treeshaking 无论直接型或引用型,f1 函数都被保留了
以下实践建立在 webpack5+ 和 vite4+,不同版本可能表现不一样