如何进行treeShaking:
目标:
1.告诉webpack代码没有副作用,可以安全被prune。
2.webpack内部对代码使用terserPlugin检测没有被使用的exports
1.在package.json中添加sideEffects字段
如果代码没有side effects 那么我们就能安全的prune那些未使用的exports。(也可以传入一个数组,来指明有sideEffects的文件
“side effect”是指当被引入的时候产生特殊行为,而不是通过export出内容来供人使用的那些库。
一个例子是 polyfills,影响了全局作用域并且通常没有export
区分tree shaking 和sideEffects:
sideEffects和检测usedExports(通常被认为是treeShaking) optimizations 是两个不同的东西,
https://webpack.js.org/configuration/optimization/#optimizationusedexports
https://webpack.js.org/configuration/optimization/#optimizationsideeffects
sideEffect更effective,因为它skip了整个module/files和子树
而usedExports依赖于terserPlugin
结论:
为了使用tree shaking,你必须:
1.使用es2015语法 import 和 export
2.保证没有把你es2015 module语法转为CommonJS module的插件,
2.在package.json中添加sideEffects:false
4.使用生产模式(会自动开启那些插件