Tree shaking — это механизм оптимизации, позволяющий удалять из итогового бандла неиспользуемый код. В контексте библиотеки Ant Design (Antd) это особенно важно, так как библиотека включает множество компонентов, стилей и утилит, и без оптимизации итоговый размер приложения может вырасти значительно.
Модули ES6 Ant Design поддерживает импорт
компонентов через ES-модули
(import { Button } from 'antd'). Для корректной работы tree
shaking необходимо использовать именно такой синтаксис. CommonJS-импорты
(const Button = require('antd').Button) не позволяют
сборщикам, таким как Webpack или
Rollup, удалять неиспользуемый код.
Отдельный импорт компонентов Для минимизации размера бандла следует импортировать только используемые компоненты:
import { Button, DatePicker } from 'antd';
Однако это может не полностью исключать все стили. По умолчанию, импорт стилей в Antd идет глобально, что приводит к включению всего CSS библиотеки.
Для эффективного tree shaking стилей Ant Design рекомендует использовать плагин babel-plugin-import. Он позволяет автоматически подгружать только те стили, которые соответствуют импортированным компонентам.
Пример настройки .babelrc:
{
"plugins": [
["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
]
}
Пояснения:
"libraryName": "antd" — указывает библиотеку."libraryDirectory": "es" — гарантирует использование
ES-модулей."style": "css" — автоматически подгружает CSS
конкретного компонента (Button →
button.css).Для проектов с Less можно использовать:
{
"plugins": [
["import", { "libraryName": "antd", "libraryDirectory": "es", "style": true }]
]
}
В этом случае будет применяться возможность кастомизации переменных через Less.
Webpack с включенным режимом
production и sideEffects: false в
package.json проекта позволяет максимально эффективно
удалять неиспользуемый код.
Пример package.json:
{
"name": "my-app",
"version": "1.0.0",
"sideEffects": false
}
sideEffects: false сообщает сборщику, что все модули не
имеют побочных эффектов и могут быть безопасно удалены, если они не
используются."sideEffects": ["*.css", "*.less"]
@ant-design/icons с tree shakingИконки в Ant Design поставляются отдельным пакетом
@ant-design/icons, который поддерживает
ES-модули. Для минимизации бандла:
import { SearchOutlined, UserOutlined } from '@ant-design/icons';
Импорт всех иконок через
import * as Icons from '@ant-design/icons' приведет к
включению всего набора, что значительно увеличивает размер бандла.
Начиная с версии 5, Ant Design предоставляет более удобный подход к tree shaking:
style={{}} и
useStyleRegister.React.lazy:const Button = React.lazy(() => import('antd/es/button'));
Это позволяет подгружать компонент только при его использовании, уменьшая первоначальный размер бандла.
package.json.Следование этим принципам позволяет минимизировать размер финального бандла и ускорить загрузку приложения, особенно при работе с крупными библиотеками UI, такими как Ant Design.