Tree shaking — это техника оптимизации JavaScript-кода, которая позволяет удалять из итогового бандла неиспользуемый код. Для библиотек компонентов, таких как Naive UI, это особенно важно, так как полноценная библиотека включает десятки компонентов, и подключение всей библиотеки целиком существенно увеличивает размер приложения.
В Naive UI архитектура построена с учётом поддержки tree shaking. Каждый компонент экспортируется отдельно, что позволяет импортировать только те элементы, которые реально используются в проекте.
Правильный способ подключения компонентов в Naive UI выглядит следующим образом:
import { NButton, NCard } from 'naive-ui';
При таком подходе сборщик (например, Vite или Webpack с поддержкой ESM) сможет удалить все остальные компоненты, которые не используются, из итогового бандла.
Если же использовать универсальный импорт:
import NaiveUI from 'naive-ui';
то весь набор компонентов попадёт в сборку, даже если реально используются только несколько элементов. Это значительно увеличивает размер JavaScript-кода.
Naive UI оптимально работает с Vite, так как Vite по умолчанию поддерживает ESM-модули и умеет удалять неиспользуемый код. Основные моменты настройки:
vite.config.js установлен режим сборки
для ESM:export default {
build: {
target: 'esnext'
}
};
Использовать import { … } from ‘naive-ui’ вместо глобального импорта.
Для глобальной настройки компонентов можно использовать create naive ui provider, но с отдельными импортами:
import { createApp } from 'vue';
import { NButton, NCard } from 'naive-ui';
import App from './App.vue';
const app = createApp(App);
app.use(NButton);
app.use(NCard);
app.mount('#app');
Для Webpack важно, чтобы библиотека была подключена как ESM-модули, а не CommonJS. Naive UI уже предоставляет поддержку ESM, поэтому достаточно:
package.json:{
"sideEffects": false
}
Это сигнализирует Webpack, что неиспользуемый код можно безопасно удалять.
Naive UI предоставляет возможность автоматического подключения стилей только для используемых компонентов. Для этого:
import { NButton } from 'naive-ui';
import 'naive-ui/es/button/style';
Каждый компонент имеет собственный файл стилей, что позволяет минимизировать CSS-бандл и полностью поддерживает концепцию tree shaking.
Для больших проектов можно использовать плагины Vite, которые автоматически импортируют только те компоненты, которые используются в шаблонах Vue:
// vite.config.js
import Components from 'unplugin-vue-components/vite';
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers';
export default {
plugins: [
Components({
resolvers: [NaiveUiResolver()]
})
]
};
Это позволяет полностью отказаться от ручного импорта компонентов, при этом сборка остаётся оптимизированной.
Чтобы убедиться, что неиспользуемые компоненты не попадают в итоговый бандл:
rollup-plugin-visualizer или
webpack-bundle-analyzer.import * as NaiveUI отключает tree
shaking.component :is="...) tree
shaking может работать частично, если сборщик не способен определить
используемые модули на этапе компиляции.Эффективное использование tree shaking в Naive UI позволяет уменьшить размер приложения, ускорить загрузку страниц и улучшить производительность, сохраняя при этом удобство использования всех компонентов библиотеки.