Element Plus — мощная библиотека компонентов для Vue 3, предоставляющая богатый набор UI-элементов. При использовании полной сборки без оптимизации размер итогового bundle может быть значительным, что негативно влияет на время загрузки приложения. Оптимизация bundle позволяет уменьшить вес проекта и ускорить его работу, сохранив все необходимые функциональные возможности.
Полная сборка Element Plus
(import ElementPlus from 'element-plus') включает все
компоненты и стили, что увеличивает размер bundle. Для минимизации
рекомендуется использовать поэлементный импорт.
Пример:
// main.js
import { createApp } from 'vue'
import App from './App.vue'
// Импорт конкретных компонентов
import { ElButton, ElInput } from 'element-plus'
import 'element-plus/es/components/button/style/css'
import 'element-plus/es/components/input/style/css'
const app = createApp(App)
app.component(ElButton.name, ElButton)
app.component(ElInput.name, ElInput)
app.mount('#app')
Ключевые моменты:
Для проектов на Vite и Vue 3 можно настроить автоматический импорт с
помощью плагина unplugin-vue-components.
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
vue(),
Components({
resolvers: [ElementPlusResolver()],
}),
],
})
Преимущества:
Element Plus предоставляет два варианта подключения стилей:
CSS – полностью готовые стили, простой вариант для небольших проектов.
import 'element-plus/dist/index.css'SCSS/LESS – позволяет использовать переменные для кастомизации и подключать только нужные стили. Пример поэлементного импорта SCSS:
@use 'element-plus/theme-chalk/src/button.scss';
@use 'element-plus/theme-chalk/src/input.scss';Использование SCSS или LESS помогает:
Tree-shaking — это процесс удаления неиспользуемого кода из итогового bundle. Для Element Plus он работает при:
import { ElButton } from 'element-plus') вместо
CommonJS.Пример настройки Vite для production:
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
build: {
target: 'esnext',
minify: 'esbuild', // или terser для дополнительной оптимизации
rollupOptions: {
output: {
manualChunks: {
'element-plus': ['element-plus']
}
}
}
}
})
Эффект:
Ленивая загрузка компонентов позволяет загружать элементы Element Plus только в момент их использования.
Пример с динамическим импортом:
import { defineAsyncComponent } from 'vue'
const AsyncButton = defineAsyncComponent(() =>
import('element-plus/es/components/button')
)
export default {
components: { AsyncButton },
}
Преимущества:
Для production-сборки рекомендуется включать:
Пример для Vite:
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import viteCompression from 'vite-plugin-compression'
export default defineConfig({
plugins: [
vue(),
viteCompression({
algorithm: 'brotliCompress',
ext: '.br'
})
]
})
Эти методы не уменьшают сам исходный код, но значительно ускоряют загрузку страниц.
@element-plus/icons-vue), чтобы не тянуть лишний код.Эти методы позволяют добиться оптимального размера bundle, сохраняя при этом полный функционал Element Plus без потери производительности.