为什么 material ui build 这么大

Why is material ui build so big

我正在尝试让 Material-ui 正确摇树。与我实际使用的包相比,该包非常大。我没有使用下面分析器插件列出的大部分组件,而是像 material-ui 文档中所说的那样导入所有内容。例如,这是它在我的一个文件中的样子。

import Button from '@material-ui/core/Button';
import CssBaseline from '@material-ui/core/CssBaseline';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Grid from '@material-ui/core/Grid';
import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
import Container from '@material-ui/core/Container';

相比之下,我使用react-bootstrap的方式非常相似,而且它的体积要小得多。

这是我的 webpack 文件

const path = require('path');
const webpack = require('webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const fs = require('fs');
const WebpackOnBuildPlugin = require('on-build-webpack');
const LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');

const buildDir = './build/';

module.exports = {
  optimization: {
    usedExports: true,
  },
  entry: {
    build: './src/index.js',
  },
  plugins: [
    new BundleAnalyzerPlugin(),
    new LodashModuleReplacementPlugin(),
    new webpack.optimize.LimitChunkCountPlugin({
      maxChunks: 25,
    }),
    new MiniCssExtractPlugin(),
  ],
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
      {
        test: /\.s[ac]ss$/i,
        use: [
          // Creates `style` nodes from JS strings
          'style-loader',
          // Translates CSS into CommonJS
          'css-loader',
          // Compiles Sass to CSS
          'sass-loader',
        ],
      },
    ],
  },
  output: {
    chunkFilename: '[id].[contenthash].chunk.js',
    filename: 'bundle.js',
    path: path.resolve(__dirname, './build'),
  },
};

考虑到我使用的是基本功能,我认为 Material-UI 会非常小(在 kb 范围内)。

另外,我也在使用路由代码分割,但 Webpack 在主包中包含 MUI,因为它由几个块共享。这意味着我在每个路由中都有一个额外的 mb,即使该页面不使用 material ui。有什么方法可以进行代码拆分,以便只有单独的 MUI 模块才能加载到适当的路径中吗?

当您在开发中 uild 时,material-ui 似乎会发生这种情况。产生式 build 摇树正确。奇怪的是,material-ui 自己的文档声称如果您进行直接文件导入,dev build 也应该正确摇树。