为什么 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';
- 已解析:1.7mb
- 统计数据:1.1mb
- 压缩后:253kb
相比之下,我使用react-bootstrap的方式非常相似,而且它的体积要小得多。
- 已解析:55kb
- 统计:28kb
- 压缩: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,因为它由几个块共享。这意味着我在每个路由中都有一个额外的 mb,即使该页面不使用 material ui。有什么方法可以进行代码拆分,以便只有单独的 MUI 模块才能加载到适当的路径中吗?
当您在开发中 uild 时,material-ui 似乎会发生这种情况。产生式 build 摇树正确。奇怪的是,material-ui 自己的文档声称如果您进行直接文件导入,dev build 也应该正确摇树。
我正在尝试让 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';
- 已解析:1.7mb
- 统计数据:1.1mb
- 压缩后:253kb
相比之下,我使用react-bootstrap的方式非常相似,而且它的体积要小得多。
- 已解析:55kb
- 统计:28kb
- 压缩: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,因为它由几个块共享。这意味着我在每个路由中都有一个额外的 mb,即使该页面不使用 material ui。有什么方法可以进行代码拆分,以便只有单独的 MUI 模块才能加载到适当的路径中吗?
当您在开发中 uild 时,material-ui 似乎会发生这种情况。产生式 build 摇树正确。奇怪的是,material-ui 自己的文档声称如果您进行直接文件导入,dev build 也应该正确摇树。