Migration Vue3: plan d'action
L’application actuelle est basée sur Vue 2 et utilise des class components (vue-class-component) ainsi que les décorateurs (vue-property-decorator). Ces technologies ne sont plus supportées en Vue 3, ce qui impose leur suppression dans tous les composants. Un outil de migration automatique existe : vue-class-migrator. Il permet de convertir les composants en utilisant l’Option API, mais présente certaines limitations : - Post-traitement nécessaire : après la transformation, des corrections manuelles sont requises pour éliminer les erreurs/warnings. - Uniquement l'option API - Ne gère pas l’héritage : l’outil ne convertit pas les composants hérités. Il faut donc transformer ces relations en mixins (Option API) ou en composables (Composition API). - Autres limitations : liste complète disponible [ici](https://github.com/getyourguide/vue-class-migrator). Dans !528, quelques composants ont déjà été migrés à l’aide de cet outil. Les composants migrés sont désormais rangés dans src/vuejs afin de visualiser l’avancement de la migration et, à terme, séparer clairement le code Vue du reste de l’application. **Choix techniques pour la migration** - L’Option API est compatible avec Vue 3, mais la Composition API est à privilégier pour les futurs développements. - Dans le cadre de la migration, si une transformation manuelle est nécessaire, il est préférable d’utiliser la Composition API (notamment pour gérer l’héritage entre les composants). ## Phase 1 : Préparation de la version actuelle (Vue 2.7) avant la migration ### 1. Inventaire des dépendances actuelles | Dépendance | Version actuelle | Compatibilité Vue 3 | |----------------------------|-----------------|----------------------| | `vue-class-component` | 7.2.6 | Obsolète | | `vue-property-decorator` | 9.1.2 | Obsolète | | `vue-debounce-decorator` | 1.0.1 | Obsolète | | `vue-router` | 3.5.1 | 4 | | `vuetify` | 2.6.1 | Vuetify 3 | | `vuex` | 3.x.x | Vuex4, Peut être remplacé par `pinia` à terme | | `vue-i18n` | 8.26.3 | Mise à jour nécessaire? (`@intlify/vue-i18n-next`) | | `vue-long-click` | 0.1.0 | À tester | | `vuetify-dialog` | 2.0.14 | À tester | ### 2. Migration progressive des .vue vers l'Option API (voire la composition API) #### Objectif : Éliminer l’usage des class components avant le passage à Vue 3. - Utiliser [`vue-class-migrator`](https://github.com/getyourguide/vue-class-migrator) pour la conversion automatique en Option API. Commande: `yarn vue-class-migrator -d src/vuejs/path/to/component/dir` - Convertir manuellement les composants qui utilisent l’héritage (`extends`) en mixins (Option API) ou composables (Composition API). - Prioriser la Composition API pour les composants nécessitant une transformation manuelle. #### Proposition d'ordre de transformation : - Etape 1 : petits composants sans héritage - Etape 2 : composants complexes sans héritage - Etape 3 : composants avec héritage. Pour chaque relation d'héritage - Etape 3.1: Copie du (ou des) composant(s) parent(s) transformés. Il faut garder les 2 versions tant que tous les composants enfants ne soit transformés. - Etape 3.2: Transformation des composants enfants - Etape 3.3: suppression des `class components` parents. #### Organisation des fichiers migrés : - Les composants déjà migrés sont placés dans `src/vuejs`. - Les composants à migrer restent dans leur dossier d'origine jusqu'à transformation. ### 3. Migration des dépendances compatibles vue3 ### 4. Remplacement des dépendances incompatibles vue3 ## Phase 2 : Migration - installation de `@vue/compat` - correction des erreurs - correction des warnings ## Phase 3 : Post-migration - Remplacer VueX par pinia - PortalVue devrait être compatible vue3 mais Vue3 inclut 'teleport' maintenant. - Tout nouveau code en Composition API - A terme, au fil de l'eau: passer les composants en option API en composition API. Meilleure maintenabilité et moins de dette technique future.
issue