原理:

使用tree shaking的前置条件
1.使用es6模块语法(即import和export)
2.在packge.json文件中,添加sideEffects入口
3.引入一个能够删除未引用代码(dead code)的压缩工具(minifier)(例如 UglifyJSPlugin)

webpack4默认的production下是会进行tree-shaking的。
optimization.usedExports
使webpack确定每个模块导出项(exports)的使用情况。依赖于optimization.providedExports的配置。optimization.usedExports收集到的信息会被其他优化项或产出代码使用到(模块未用到的导出项不会被导出,在语法完全兼容的情况下会把导出名称混淆为单个char)。为了最小化代码体积,未用到的的导出项目(exports)会被删除。生产环境(production)默认开启。

  1. module.exports = {
  2. //...
  3. optimization: {
  4. usedExports: true
  5. }
  6. };

参考资料:
1.https://www.webpackjs.com/guides/tree-shaking/
2.https://juejin.im/post/6859888538004783118#heading-27