webpack5-自记-03 tree-shaking

499 阅读1分钟

image.png

这里已经表明了局限性,首先定义 Title 文件:

const Title = children => {
  const title = document.createElement('h3');
  title.classList.add('title');
  title.innerHTML = children;
  return title;
};

export default Title;

使用成功

开启 optimization.usedExports 对代码进行标记。

index.js:

import Title from './Title';

webpack config:

{
    //...
  mode: 'none',
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env']
            }
          }
        ]
      }
    ]
  },
  optimization: {
      usedExports: true,
  }
}

构建结果:

image.png 此时再开启 minimize 后构建:

image.png

成功使用 tree-shaking

使用失败

如 webpack 所说,如果将模块编译为非 esModule 代码:

config:

{
    loader: 'babel-loader',
        options: {
            presets: [
                ['@babel/preset-env', {
                    modules: 'commonjs',
                }]
        ]
    }
}

将目标结果构建为 commjs,关闭 minimize 看下构建结果:

image.png

此时模块代码没有被标记,开启 minimize 再看下构建结果:

image.png

treeShaking 使用失效