Реагировать и большая производственная связка

Webpack выводит очень большой пакет: 1,5 МБ сведено к минимуму.

Я импортирую отдельные компоненты в соответствии с документами, используя import 'antd / lib /...'
Это мой импорт:

import React from "react";
import ReactDOM from "react-dom";

import TreeSelect from 'antd/lib/tree-select';
const TreeNode = TreeSelect.TreeNode;
import 'antd/lib/tree-select/style/css';

import moment from 'moment';
import LocaleProvider from 'antd/lib/locale-provider';

import DatePicker from 'antd/lib/date-picker';
import 'antd/lib/date-picker/style/css'
const { RangePicker } = DatePicker;

import Menu from 'antd/lib/menu';
import 'antd/lib/menu/style/css'

import Dropdown from 'antd/lib/dropdown';
import 'antd/lib/dropdown/style/css';

import Modal from 'antd/lib/modal';
import 'antd/lib/modal/style/css';

import './styles.css';

Я использую только 5 компонентов. Имеет ли смысл, что размер пакета такой большой? Мой собственный код довольно маленький - около 15 КБ без минификации.

ОБНОВЛЕНИЕ: после использования IgnorePlugin() на данный момент мой размер пакета стал на 300 КБ меньше. Тем не менее 1,5 МБ очень большой.

Ниже приведены файлы конфигурации webpack.

webpack.config.js:

  const config = {
        entry: {
            main: path.resolve(SRC_DIR, "index.js"),
        },
        mode: 'development',
        devtool: 'cheap-eval-source-map',
        output: {
            path: DIST_DIR,
            filename: "bundle.js",
            publicPath: "/static/bundles/",
        },
        resolve: {
            extensions: [".js", ".json", ".css"]
        },
        module: {
            rules: [
                {
                    test: /\.js?/,
                    include: SRC_DIR,
                    loader: "babel-loader",
                    options: {
                        babelrc: true
                    }
                },
                {
                    test: /\.css$/,
                    use: [
                        "style-loader", "css-loader"
                    ]
                }
            ]
        },
      plugins: [
        new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NamedModulesPlugin(),
        //new webpack.LoaderOptionsPlugin({ debug: true}),
      ]
    };

    module.exports = config;

webpack.prod.js (используется для создания пакета):

const common = require('./webpack.config.js');
   module.exports = Object.assign(common, {
        entry: {
            main: path.resolve(SRC_DIR, "index.js"),
        },
        mode: 'production',
        devtool: false,
        output: {
            publicPath: '/static/dist/',
            path: DIST_DIR,
            filename: 'bundle.js'
        },
        plugins: [
            new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
            new BundleAnalyzerPlugin()
        ]
    });

1 ответ

Некоторые компоненты функции даты и времени Antd, такие как RangePicker, также используют моментный файл lib.js, поэтому он может стать довольно тяжелым.

UPD:

попробуйте оптимизировать его с помощью плагинов:

new webpack.optimize.UglifyJsPlugin({
  compress: {
    warnings: false,
    screw_ie8: true,
    conditionals: true,
    unused: true,
    comparisons: true,
    sequences: true,
    dead_code: true,
    evaluate: true,
    if_return: true,
    join_vars: true,
  },
  comments: false,
  sourceMap: true,
  minimize: true,
  exclude: [/\.min\.js$/gi],
}),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.AggressiveMergingPlugin(),
new webpack.optimize.ModuleConcatenationPlugin(),

На данный момент огромная часть antd dist - иконки svg. 16,3%, если быть точным (текущая версия).

Я считаю, что у нас пока нет официальных способов справиться с иконками, но обходной путь существует. Вы можете найти это здесь.

Таким образом, если вы удалите этот и текущий языковой стандарт, вы можете уменьшить размер библиотеки примерно на 20%.

Они работают над уменьшением размера lib в antd 4, для которого он уже находится в альфа-версии (с уменьшенным уже 130 КБ).

Другие вопросы по тегам