Element Plus предоставляет возможность гибкого использования компонентов через ручной импорт, что особенно важно для оптимизации размера итогового бандла и повышения производительности приложения. Вместо глобального подключения всех компонентов можно импортировать только те, которые реально используются.
Для начала необходимо установить библиотеку через npm или yarn:
npm install element-plus
# или
yarn add element-plus
После установки можно подключать отдельные компоненты вручную. Это позволяет избежать автоматического подключения стилей и лишнего кода.
Вместо глобального импорта через app.use(ElementPlus)
каждый компонент можно импортировать по отдельности:
import { ElButton, ElInput } from 'element-plus';
import 'element-plus/es/components/button/style/css';
import 'element-plus/es/components/input/style/css';
export default {
components: {
ElButton,
ElInput
}
};
Ключевые моменты:
Некоторые элементы, такие как уведомления, сообщения или загрузки, не
требуют прямого добавления в components. Для них
применяется ручной импорт функций:
import { ElMessage, ElNotification } from 'element-plus';
import 'element-plus/es/components/message/style/css';
import 'element-plus/es/components/notification/style/css';
ElMessage({
message: 'Операция выполнена успешно',
type: 'success',
});
ElNotification({
title: 'Внимание',
message: 'Произошло событие',
type: 'warning',
});
Особенность: эти функции не добавляются в шаблон Vue, они вызываются напрямую через JS.
Для больших проектов рекомендуется создавать файл-пакет компонентов, который централизует ручной импорт. Например:
// element-components.js
import { ElButton, ElSelect } from 'element-plus';
import 'element-plus/es/components/button/style/css';
import 'element-plus/es/components/select/style/css';
export default {
install(app) {
app.component('ElButton', ElButton);
app.component('ElSelect', ElSelect);
}
};
Подключение в основном приложении:
import { createApp } from 'vue';
import App from './App.vue';
import ElementComponents from './element-components';
const app = createApp(App);
app.use(ElementComponents);
app.mount('#app');
Такой подход позволяет легко управлять компонентами и их стилями в одном месте.
Дерево зависимостей (tree-shaking) Ручной импорт полностью совместим с tree-shaking, что уменьшает размер итогового бандла и ускоряет загрузку.
Стиль компонента Можно подключать CSS или SCSS. Например:
import 'element-plus/es/components/button/style/index.scss';Совместимость с TypeScript Ручной импорт позволяет корректно использовать типы компонентов:
import type { ButtonProps } from 'element-plus';Гибкость настройки Можно импортировать только функционал или только стили отдельно, что полезно для тонкой оптимизации.
Element Plus предоставляет плагины для автоматического импорта
компонентов через unplugin-vue-components. Ручной импорт
можно использовать вместе с автоматическим, если нужно
подключить редкие или специфические компоненты, которые не должны быть
глобальными.
Пример сочетания:
import { ElMessage } from 'element-plus';
import 'element-plus/es/components/message/style/css';
// остальные компоненты импортируются автоматически через плагин
При ручном импорте возможно использовать локальные темы или кастомные SCSS-переменные для изменения стилей:
@use "element-plus/theme-chalk/src/button.scss" with (
$--button-primary-background: #42b983,
$--button-primary-color: #fff
);
Импорт компонентов при этом остаётся прежним, но внешний вид можно полностью адаптировать под дизайн приложения.
<template>
<el-button type="primary" @click="notify">Нажми меня</el-button>
</template>
<script>
import { ElButton, ElNotification } from 'element-plus';
import 'element-plus/es/components/button/style/css';
import 'element-plus/es/components/notification/style/css';
export default {
components: { ElButton },
methods: {
notify() {
ElNotification({
title: 'Привет',
message: 'Это уведомление Element Plus',
type: 'success'
});
}
}
};
</script>
Ручной импорт позволяет оставаться максимально точным в выборе компонентов, уменьшает размер бандла и обеспечивает простую настройку внешнего вида и функционала.