- Audit: Inventory of components, mixins, filters, plugins, dependencies
- Compatibility build: Vue 3 has a
@vue/compatmode that emulates Vue 2 and shows warnings - Incremental migration:
- First: update build tooling (Webpack → Vite)
- Second: remove deprecated APIs (filters, event bus
$on/$off,$listeners) - Third: migrate Options API → Composition API component by component
- Fourth: mixins → composables
- Fifth: Vuex → Pinia (or Vuex 4 as intermediate step)
- Testing at each step: Existing tests should keep passing
- Risk areas: Third-party libraries, custom directives, render functions, plugins
The compatibility build makes it possible to do it incrementally. The key is not trying to migrate everything at once. Go component by component, with tests at each step.