Развитие библиотеки интерфейсных компонентов сопровождается изменениями API, структуры компонентов, подходов к стилизации и конфигурации. При переходе между крупными версиями библиотеки требуется адаптация существующего кода. В экосистеме Vuetify для этого используются специальные инструменты миграции, которые автоматизируют преобразование проектов и уменьшают объём ручной работы.
Инструменты миграции решают несколько задач:
Использование таких инструментов особенно важно при переходе между крупными версиями, например с Vuetify 2 на Vuetify 3, где были изменены многие внутренние механизмы.
Процесс миграции обычно включает несколько этапов:
Инструменты автоматизации покрывают только часть задач. Некоторые изменения требуют ручного вмешательства, особенно если проект содержит кастомные компоненты или нестандартные расширения.
Один из основных инструментов — утилита миграции, предназначенная для анализа проекта и предложения изменений. Она выполняет:
Типичная проверка выполняется после обновления зависимостей.
npm install vuetify@latest
или
yarn add vuetify@latest
После обновления выполняется анализ проекта.
Codemods — это скрипты, автоматически преобразующие исходный код проекта. Они основаны на анализе AST (Abstract Syntax Tree) и позволяют безопасно изменять структуру кода.
Такие инструменты выполняют следующие операции:
Vuetify 2:
import Vuetify from 'vuetify'
Vue.use(Vuetify)
Vuetify 3:
import { createVuetify } from 'vuetify'
const vuetify = createVuetify()
Codemods автоматически заменяют подобные конструкции во всём проекте.
Во время перехода между версиями многие компоненты были переработаны. Некоторые из них:
Инструменты миграции помогают обнаружить такие изменения.
Vuetify 2:
<v-btn color="primary" dark>
Submit
</v-btn>
Vuetify 3:
<v-btn color="primary" variant="flat">
Submit
</v-btn>
Параметр dark больше не используется, так как система
темизации изменилась.
Vuetify 3 полностью переработал механизм темизации. Вместо старых параметров используется централизованная конфигурация.
Vuetify 2:
new Vuetify({
theme: {
dark: true
}
})
Vuetify 3:
createVuetify({
theme: {
defaultTheme: 'dark'
}
})
Инструменты миграции помогают выявить старые настройки и предложить новые варианты конфигурации.
Сетка также получила изменения. Хотя базовые компоненты
(v-container, v-row, v-col)
остались, некоторые параметры изменились.
Инструменты миграции проверяют:
Пример старого синтаксиса:
<v-layout row>
<v-flex xs12>
Content
</v-flex>
</v-layout>
Новый синтаксис:
<v-row>
<v-col cols="12">
Content
</v-col>
</v-row>
Codemods могут автоматически преобразовать такие структуры.
В Vuetify 3 изменился механизм подключения иконок. Теперь используется централизованная система и провайдеры.
Старая конфигурация:
new Vuetify({
icons: {
iconfont: 'mdi'
}
})
Новая конфигурация:
createVuetify({
icons: {
defaultSet: 'mdi'
}
})
Инструменты миграции могут обнаружить старые настройки и обновить их.
Система слотов также была изменена. В Vuetify 3 используются возможности Vue 3, включая улучшенные scoped slots.
Старый синтаксис:
<template slot="activator" slot-scope="{ on }">
<v-btn v-on="on">Open</v-btn>
</template>
Новый синтаксис:
<template #activator="{ props }">
<v-btn v-bind="props">Open</v-btn>
</template>
Codemods автоматически обновляют большинство таких конструкций.
Vuetify 3 использует другой механизм инициализации.
Vuetify 2:
import Vue from 'vue'
import Vuetify from 'vuetify'
Vue.use(Vuetify)
export default new Vuetify()
Vuetify 3:
import { createVuetify } from 'vuetify'
export const vuetify = createVuetify()
Также изменяется способ подключения в приложении:
createApp(App)
.use(vuetify)
.mount('#app')
Vuetify 3 использует новый механизм работы со стилями на основе CSS Variables.
Инструменты миграции помогают обнаружить:
Старый подход:
$btn-border-radius: 8px;
Новый подход основан на CSS-переменных и настройках темы.
После автоматической миграции рекомендуется проверить:
Некоторые библиотеки могут поддерживать только старую версию Vuetify.
Типичная проверка выполняется через запуск проекта:
npm run dev
или
yarn dev
Ошибки, возникающие во время компиляции, помогают выявить места, требующие ручной корректировки.
Дополнительным инструментом может выступать ESLint с правилами, выявляющими устаревшие конструкции.
Такие правила помогают:
Пример проверки:
npx eslint src
В проектах с TypeScript могут потребоваться дополнительные изменения:
Vuetify 3 предоставляет новые типы для компонентов и конфигурации.
Пример импорта типов:
import { createVuetify } from 'vuetify'
import type { ThemeDefinition } from 'vuetify'
Инструменты миграции могут обновлять часть таких импортов автоматически.
Даже после применения codemods остаются участки, требующие ручной доработки:
Поэтому автоматическая миграция рассматривается как подготовительный этап, значительно сокращающий объём работы, но не полностью заменяющий ручной аудит кода.
На практике используется поэтапный подход:
Такой процесс минимизирует риск появления регрессий и позволяет постепенно адаптировать крупные приложения к новой версии библиотеки.