Для начала необходимо создать проект на Vue.js, если он ещё не создан. В терминале выполняется команда:
vue create my-vuetify-app
Выбирается нужная конфигурация, включающая Babel, Router и Vuex, если требуется. После этого проект готов к ручной установке Vuetify.
Vuetify устанавливается как отдельный пакет:
npm install vuetify@next
# или
yarn add vuetify@next
Важно отметить, что @next указывает на версию Vuetify
для Vue 3. Для Vue 2 используется обычная версия:
npm install vuetify
После установки библиотека становится доступной в проекте для ручной конфигурации.
Создаётся отдельный файл для конфигурации Vuetify, например,
vuetify.js или vuetify.ts для TypeScript. В
этом файле выполняется импорт компонентов и плагина Vuetify:
// vuetify.js
import { createVuetify } from 'vuetify'
import 'vuetify/styles' // Импорт глобальных стилей
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
export default createVuetify({
components,
directives,
theme: {
defaultTheme: 'light',
themes: {
light: {
colors: {
primary: '#1976D2',
secondary: '#424242',
accent: '#82B1FF',
error: '#FF5252',
info: '#2196F3',
success: '#4CAF50',
warning: '#FB8C00'
}
}
}
}
})
Далее Vuetify подключается в главный файл проекта
main.js или main.ts:
import { createApp } from 'vue'
import App from './App.vue'
import vuetify from './vuetify'
const app = createApp(App)
app.use(vuetify)
app.mount('#app')
Vuetify позволяет создавать собственные темы с
набором цветов. В объекте themes можно определять несколько
тем, например, light и dark. Для каждой темы
задаются цвета основных элементов: primary,
secondary, accent, error,
info, success, warning.
Смена темы в рантайме выполняется через
$vuetify.theme.global.name:
this.$vuetify.theme.global.name = 'dark'
Для динамического изменения отдельных цветов используется API:
this.$vuetify.theme.themes.value.light.primary = '#FF5722'
Vuetify поддерживает Material Design Icons, Font Awesome и другие
наборы. Для подключения Material Design Icons добавляется в
index.html:
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet">
После этого иконки становятся доступны в компонентах:
<v-btn icon>
<v-icon>mdi-home</v-icon>
</v-btn>
Для Font Awesome используется аналогичная логика с подключением
стилей и настройкой aliases в Vuetify.
Vuetify поддерживает i18n. Для подключения необходимо установить пакет:
npm install vue-i18n
И подключить в конфигурации Vuetify:
import { createI18n } from 'vue-i18n'
import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
const i18n = createI18n({
locale: 'ru',
messages: {
ru: { $vuetify: { close: 'Закрыть', dataIterator: { noResultsText: 'Совпадений не найдено' } } }
}
})
const vuetify = createVuetify({
components,
directives,
locale: {
locale: 'ru',
fallback: 'en',
messages: i18n.global.messages
}
})
export default vuetify
По умолчанию в Vuetify можно подключать все компоненты, как показано выше. Для оптимизации бандла можно регистрировать только нужные компоненты:
import { VApp, VBtn, VCard } from 'vuetify/components'
export default createVuetify({
components: { VApp, VBtn, VCard }
})
Это снижает размер сборки и ускоряет загрузку приложения.
Vuetify предоставляет директивы для работы с ripple-эффектами,
тултипами и другими визуальными элементами. Они подключаются через
объект directives:
import { Ripple } from 'vuetify/directives'
export default createVuetify({
directives: { Ripple }
})
Использование директивы в шаблоне:
<v-btn v-ripple>Кнопка с эффектом</v-btn>
При ручной настройке можно исключать компоненты и стили, которые не
используются, чтобы уменьшить размер сборки. Например, импортировать
только нужные функции из vuetify/styles:
import 'vuetify/styles/components/VBtn.css'
Или использовать динамическую подгрузку компонентов через
defineAsyncComponent для крупных приложений.
src/
├─ main.js
├─ vuetify.js
├─ App.vue
└─ components/
├─ MyButton.vue
└─ MyCard.vue
Такой подход позволяет полностью контролировать установку, подключение тем, локализацию, иконки и набор используемых компонентов, обеспечивая гибкость и оптимизацию Vue-проекта с Vuetify.