При использовании Naive UI в проектах на JavaScript важно правильно организовать конфигурацию сборщика, чтобы обеспечить корректную работу компонентов, минимизацию и оптимизацию размера бандла, а также поддержку динамических импортов. Библиотека разработана с учётом современных сборщиков, таких как Vite, Webpack, и Rollup, поэтому подходы к настройке могут различаться в зависимости от выбранного инструмента.
Для начала необходимо установить библиотеку через npm или yarn:
npm install naive-ui
# или
yarn add naive-ui
После установки её можно импортировать в проект:
import { createApp } from 'vue';
import { NButton } from 'naive-ui';
const app = createApp(App);
app.component('NButton', NButton);
app.mount('#app');
Naive UI поддерживает как полные, так и tree-shaking-импорты, что позволяет исключать неиспользуемые компоненты из бандла и существенно уменьшать размер итогового файла.
Tree-shaking особенно эффективен при использовании сборщиков типа Vite или Rollup, которые анализируют статический импорт модулей. Для Naive UI это выглядит так:
import { NButton, NInput } from 'naive-ui';
Импорт отдельных компонентов гарантирует, что в итоговый бандл попадут только необходимые части библиотеки. Если импортировать всю библиотеку целиком:
import NaiveUI from 'naive-ui';
то размер бандла увеличится, что нежелательно для продакшн-сборки.
Vite является рекомендованным инструментом для проектов с Naive UI благодаря своей скорости и простоте. Основные моменты конфигурации:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
}
}
});
Для ускорения старта приложения можно указать Naive UI как pre-bundled dependency:
optimizeDeps: {
include: ['naive-ui']
}
Naive UI позволяет загружать компоненты по требованию с помощью динамического импорта:
const NButton = () => import('naive-ui/lib/button');
Это особенно важно для крупных приложений, где нужно минимизировать первичный бандл.
При использовании Webpack важно учитывать несколько особенностей:
const path = require('path');
module.exports = {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
}
};
Webpack автоматически выполняет tree-shaking при использовании
ES-модулей (import { NButton } from 'naive-ui') и
включенном mode: 'production'.
const NButton = () => import('naive-ui/lib/button');
Naive UI предоставляет стили в виде CSS-модулей. Для Webpack
рекомендуется использовать MiniCssExtractPlugin:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
plugins: [new MiniCssExtractPlugin()],
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader']
}
]
}
};
Naive UI поддерживает темизацию через CSS-переменные. Для корректной работы сборщика необходимо правильно подключить основной файл стилей:
import 'naive-ui/dist/naive-ui.css';
Для Vite или Webpack можно включить PostCSS и SCSS, если требуется динамическая генерация тем:
module.exports = {
css: {
loaderOptions: {
scss: {
additionalData: `$primary-color: #42b983;`
}
}
}
};
Naive UI совместим с Server-Side Rendering (SSR), но сборщик должен правильно обрабатывать модули:
import { createSSRApp } from 'vue';
import { NButton } from 'naive-ui';
export function createApp() {
const app = createSSRApp(App);
app.component('NButton', NButton);
return app;
}
Необходимо убедиться, что target: 'node' и
externals настроены для корректной работы с Naive UI, чтобы
не включать лишние модули в серверный бандл.
optimizeDeps в Vite.rollup-plugin-visualizer,
webpack-bundle-analyzer) и исключать ненужные пакеты.Эти подходы позволяют организовать проект с Naive UI эффективно, минимизировать размер бандла и ускорить загрузку как для разработки, так и для продакшн-сборки.