为什么 Material UI 构建这么大
2021-09-10
2756
我正在尝试让 Material-ui 正确地进行 tree-shaking。与我实际使用的相比,这个包非常大。我没有使用下面分析器插件列出的大多数组件,而是按照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';
- 解析:1.7mb
- 状态:1.1mb
- Gzipped:253kb
相比之下,我以非常类似的方式使用 react-bootstrap,其大小要小得多。
- 解析:55kb
- 状态:28kb
- Gzipped:7kb
这是我的 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,因为它由几个块共享。这意味着即使该页面不使用 Material UI,我在每个路由中都会有额外的 mb。有没有办法进行代码拆分,以便只有单个 MUI 模块在其适当的路由中加载?
1个回答
当您在开发环境中构建时,material-ui 似乎会发生这种情况。生产构建正确地进行了 tree-shaking。但奇怪的是,material-ui 自己的文档声称,如果您直接导入文件,开发构建也应该正确地进行 tree-shaking。
Jeremy Gottfried
2021-09-11