Catégories
Featured-Post-Software-FR Ingénierie Logicielle (FR)

Guide complet du routing avec Vue.js : passer du routage natif à vue-router pour des applications performantes

Auteur n°2 – Jonathan

Par Jonathan Massa
Lectures: 2

Résumé – Garantir une navigation client-side performante et maintenable est essentiel pour réduire la charge serveur, optimiser l’engagement utilisateur et accélérer le time-to-market. Cet article détaille d’abord un router natif minimal via hashchange, idéal pour de petits prototypes sans dépendance externe, puis la configuration de vue-router (history/hash), l’usage de router-link et router-view, la navigation programmée, les guards, les routes nommées, dynamiques et imbriquées, le lazy loading, le SSR/Nuxt et les tests CI/CD pour des SPA de taille moyenne à grande.
Solution : choisir le routage adapté à l’échelle puis industrialiser via best practices et intégration CI/CD pour garantir fiabilité, scalabilité et SEO.

Dans un paysage où les interfaces web exigent rapidité et fluidité, la mise en place d’un système de navigation robuste est un levier clé pour la satisfaction utilisateur et la maintenabilité. Cet article propose un panorama complet du routage dans Vue.js, depuis une implémentation maison légère jusqu’à la maîtrise de la bibliothèque officielle vue-router.

Vous y découvrirez les mécanismes, avantages et limites de chaque approche, ainsi que des bonnes pratiques pour garantir performance, scalabilité et intégration CI/CD. À travers des exemples concrets issus de projets en Suisse, nous mettons en lumière les enjeux business et techniques pour des équipes IT exigeantes.

Comprendre le routage natif dans Vue.js et ses enjeux

Une navigation client-side adéquate réduit les allers-retours serveur et améliore l’expérience perçue par l’utilisateur. Cette section détaille l’écosystème Vue.js et montre comment implémenter un router minimal sans dépendance externe.

L’écosystème Vue.js et les enjeux business

Vue.js s’appuie sur des composants Single-File (SFC) permettant de regrouper template, script et style. Les deux paradigmes majeurs – Options API et Composition API – offrent des modèles clairs pour organiser la logique et l’état.

Dans une SPA, l’utilisateur navigue sans rechargement complet, ce qui préserve l’état de l’application et accélère les interactions. Cette fluidité est essentielle pour assurer un taux de conversion optimal et limiter l’attrition.

Côté business, une navigation client-side permet de réduire la charge serveur et les coûts d’infrastructure, tout en facilitant le déploiement rapide de nouvelles fonctionnalités. La modularité offerte par Vue.js accélère le time-to-market et améliore la maintenabilité.

Implémentation d’un router minimal avec hashchange

Un router natif peut s’appuyer sur la propriété window.location.hash et l’événement hashchange. On définit une table de correspondance simple entre chemin et composant.

Exemple de code pour un projet initialisé avec Vite :

const routes = {
  '#/': Home,
  '#/about': About
};
const currentView = Vue.ref(routes[window.location.hash] || routes['#/']);
window.addEventListener('hashchange', () => {
  currentView.value = routes[window.location.hash] || routes['#/'];
});

Dans votre App.vue, on peut faire :

<div>
  <nav>
    <a href="#/">Home</a>
    <a href="#/about">About</a>
  </nav>
  <component :is="currentView"></component>
</div>

Les composants Home.vue et About.vue contiennent leur template et script habituels. Cette approche ne nécessite aucune configuration serveur et convient pour des prototypes ou des petits sites.

Atouts et limites du routage natif

Le principal avantage d’un router maison est l’absence de dépendance externe et la simplicité de mise en œuvre. Aucun build spécial ou script de redirection n’est requis en production.

Cette méthode est adaptée aux applications avec moins de cinq routes et sans besoins de paramètres dynamiques ou de navigation programmée. Elle permet un prototypage rapide et une compréhension directe des mécanismes.

En revanche, dès que le projet croît, la gestion des routes dynamiques (/users/:id), des sous-routes ou des guards devient rapidement ingérable. Aucune API de redirection conditionnelle ni hooks n’existent nativement, et le code tend à s’éparpiller.

Un exemple d’un portail interne développé pour une PME a montré que l’ajout de plusieurs pages a entraîné un code éparpillé et un risque d’incohérence grandissant.

Passer à vue-router : configuration de base et navigation

vue-router est la bibliothèque officielle pour des SPA Vue.js de taille moyenne à grande. Cette section présente son installation, la configuration initiale et les modes de navigation déclarative et programmée.

Installation et configuration du routeur

Pour démarrer, on installe vue-router via npm :

npm install vue-router@4

Ensuite, dans main.js :

import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import App from './App.vue';
import Home from './views/Home.vue';
import About from './views/About.vue';

const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
});

createApp(App).use(router).mount('#app');

Cette configuration initialise un routeur en mode History et déclare deux routes principales. L’application Vue est ensuite liée au routeur avant le montage.

Navigation déclarative avec router-link et router-view

Le balisage HTML est remplacé par les composants <router-link> et <router-view>. Le premier génère des liens adaptés à la configuration History ou Hash, et le second affiche dynamiquement le composant associé à la route active.

Exemple :

<template>
  <nav>
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
  </nav>
  <router-view></router-view>
</template>

Cette approche garantit une syntaxe déclarative et cohérente, avec gestion automatique des classes actives et du comportement par défaut des liens.

Navigation programmée avec le routeur

Pour déclencher une navigation depuis le code, on utilise les méthodes du routeur. Avec Options API : this.$router.push('/path') ou this.$router.replace('/path'). Avec Composition API :

import { useRouter } from 'vue-router';
setup() {
  const router = useRouter();
  function goToHome() {
    router.push({ name: 'home' });
  }
  return { goToHome };
}

Ces méthodes permettent de gérer des redirections conditionnelles, de simuler le back button (router.go(-1)) ou de remplacer l’historique sans ajouter d’entrée.

Une organisation a migré son portail vers vue-router et a pu centraliser ses redirections de connexion dans un middleware global, simplifiant la maintenance et réduisant les bugs.

Edana : partenaire digital stratégique en Suisse

Nous accompagnons les entreprises et les organisations dans leur transformation digitale

Routes avancées, modes d’historique et navigation sécurisée

Pour des applications complexes, vue-router offre des routes nommées, dynamiques, imbriquées, plusieurs modes d’historique et des guards pour contrôler l’accès. Cette section explore ces fonctionnalités avancées.

Routes nommées, dynamiques et imbriquées

Déclarer une route avec un attribut name facilite les renvois ultérieurs et la refactorisation. Les chemins dynamiques s’écrivent sous la forme /users/:id et capturent les paramètres dans $route.params.

Les sous-routes (children) permettent de structurer les pages composées, par exemple un parent /dashboard et ses onglets enfants.

Exemple :

routes: [
  {
    path: '/user/:id',
    name: 'user-profile',
    component: UserProfile,
    children: [
      { path: 'settings', component: UserSettings },
      { path: 'activity', component: UserActivity }
    ]
  }
]

Une enseigne a utilisé cette configuration pour charger dynamiquement le profil utilisateur et ses sous-modules. L’approche a démontré une nette réduction du code redondant et une meilleure tolérance au renommage des routes.

Modes History vs Hash et configuration serveur

vue-router propose createWebHashHistory() (URLs avec #) et createWebHistory() (HTML5 History API). Le mode Hash ne nécessite aucune configuration serveur, tandis que History offre des URLs propres pour le SEO mais requiert une redirection de toutes les requêtes vers index.html.

Pour un déploiement Nginx :

location / {
  try_files $uri $uri/ /index.html;
}

En mode History, il est crucial d’anticiper ces réécritures, sous peine d’erreurs 404 sur rechargement direct de pages profondes.

Navigation guards et sécurité d’accès

Les guards globaux (router.beforeEach), par-route (beforeEnter) et au niveau composant (beforeRouteEnter, beforeRouteLeave) autorisent un contrôle fin des accès.

Cas d’usage : vérifier un token avant chaque navigation et rediriger vers la page de login en cas d’absence d’authentification. Les guards supportent les retours de promesses, permettant d’attendre la résolution d’une API d’identité.

Exemple :

router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated()) {
    next({ name: 'login' });
  } else {
    next();
  }
});

Cette approche permet de centraliser la sécurité et d’éviter la dispersion de vérifications dans chaque composant.

Optimisation, SSR/Nuxt et tests pour un routing de qualité

Améliorer la performance par le code splitting, tirer parti de SSR avec Nuxt.js pour le SEO et intégrer des tests automatisés garantissent un routing fiable et maintenable dans la durée.

Lazy loading et découpage du bundle

Le routage dynamique autorise le chargement différé des composants via la syntaxe () => import('...'). Cela génère des chunks séparés et réduit le poids initial du bundle.

Dans la configuration :

routes: [
  { path: '/about', component: () => import('@/views/About.vue') }
]

mobile et les réseaux instables bénéficient particulièrement de cette technique, accélérant le time-to-interactive.

Intégration SSR/Nuxt et SEO

Nuxt.js automatise la création de routes via le dossier pages/ et propose un mode SSR ou SSG pour une indexation optimisée. Chaque fichier .vue devient une route, et le nuxt.config permet de définir metadata et head.

Grâce à SSR, le contenu est rendu côté serveur, ce qui améliore le SEO et les performances perçues. Les balises meta sont gérées nativement pour chaque page.

Tests et bonnes pratiques pour un router fiable

Les tests unitaires avec Jest peuvent simuler la navigation en instanciant le routeur et en vérifiant la résolution des routes. Les tests e2e (Cypress, Playwright) automatisent des parcours utilisateur complets pour valider la cohérence du routing.

Il est important d’intégrer ces tests dans la CI/CD pour détecter rapidement toute régression. Les conventions de nommage DRY et la séparation des fichiers router par domaine fonctionnel renforcent la maintenabilité.

Un établissement de santé a mis en place des tests e2e pour couvrir la navigation entre dossiers patients, garantissant conformité et absence d’impair lors des mises à jour de version.

Optimisez votre navigation Vue pour booster performance et maintenabilité

La mise en place d’un router adapté, qu’il soit natif pour un prototype léger ou basé sur vue-router pour des applications robustes, constitue un fondement stratégique. Les routes nommées, le choix du mode d’historique, les guards et le lazy loading sont autant de leviers à maîtriser pour garantir une expérience utilisateur fluide et un code maintenable.

Notre approche contextuelle, modulable et orientée ROI vous accompagne depuis l’audit de votre architecture jusqu’à la mise en place de tests automatisés et de processus CI/CD. Nos experts sont à vos côtés pour définir la stratégie de routing la plus adaptée à vos enjeux métier, assurer la montée en charge et sécuriser votre déploiement.

Parler de vos enjeux avec un expert Edana

Par Jonathan

Expert Technologie

PUBLIÉ PAR

Jonathan Massa

En tant que spécialiste senior du conseil technologique, de la stratégie et de l'exécution, Jonathan conseille les entreprises et organisations sur le plan stratégique et opérationnel dans le cadre de programmes de création de valeur et de digitalisation axés sur l'innovation et la croissance. Disposant d'une forte expertise en architecture d'entreprise, il conseille nos clients sur des questions d'ingénierie logicielle et de développement informatique pour leur permettre de mobiliser les solutions réellement adaptées à leurs objectifs.

FAQ

Questions fréquemment posées sur le routing Vue.js

Pourquoi migrer d’un router natif vers vue-router dans une SPA Vue.js ?

Vue-router offre des fonctionnalités clés comme les routes dynamiques, les guards d’accès et la navigation programmée, absentes d’un router natif minimal. Cette bibliothèque officielle garantit une architecture maintenable et évolutive, essentielle dès que le projet dépasse quelques routes et nécessite un contrôle fin de la sécurité et des performances.

Comment optimiser le SEO quand on utilise vue-router en mode History ?

Le mode History produit des URL propres, mais exige une configuration serveur (ex. try_files sur Nginx) pour rediriger toutes les requêtes vers index.html. Pour renforcer le SEO, il est conseillé d’intégrer un rendering côté serveur (SSR) ou la génération statique (SSG) via Nuxt.js et de définir des meta tags dynamiques par route.

Quelles bonnes pratiques pour gérer les guards d’accès avec vue-router ?

Privilégiez les guards globaux (router.beforeEach) pour centraliser la logique d’authentification, complétés par des guards par-route (beforeEnter) pour des cas spécifiques. Les guards composant (beforeRouteEnter/Leave) sont utiles pour gérer l’accès aux données. Cette approche modulaire facilite la maintenance et évite la duplication de code.

Comment implémenter le lazy loading des routes pour améliorer la performance ?

Le lazy loading via des imports dynamiques (ex. () => import('@/views/MyView.vue')) génère des chunks séparés, réduisant le poids initial du bundle. Associez cela à des noms de chunks explicites pour faciliter le suivi. Cette technique optimise le time-to-interactive, particulièrement sur mobile et en réseaux instables.

Quels sont les risques d’une implémentation de router natif dans un projet de taille moyenne ?

Un router natif manque de fonctionnalités avancées (routes dynamiques, sous-routes, guards), ce qui entraîne rapidement de la duplication de code et des incohérences. À moyen terme, la maintenabilité se dégrade et l’ajout de nouvelles fonctionnalités devient laborieux, augmentant les risques de bugs et retards.

Comment intégrer les tests pour valider le routage (unitaires et e2e) ?

En tests unitaires, utilisez Jest et Vue Test Utils pour simuler la navigation avec le routeur et vérifier le rendu des composants. En e2e, misez sur Cypress ou Playwright pour automatiser des scénarios utilisateur (navigation, redirections, accès protégé). Intégrez ces suites dans la CI pour détecter rapidement les régressions.

Quels critères pour choisir entre hash mode et history mode ?

Le hash mode est simple à déployer sans configuration serveur, idéal pour prototypes ou applications internes. Le history mode offre des URLs SEO-friendly mais nécessite des règles de réécriture sur le serveur. Choisissez en fonction des besoins SEO, de la complexité du déploiement et des contraintes d’infrastructure.

Comment intégrer vue-router dans un pipeline CI/CD pour garantir la qualité du routing ?

Automatisez l’exécution de linters et de tests (unitaires et e2e) à chaque build. Intégrez un contrôle des routes déclarées (snapshot des routes) et validez les changements de configuration avant déploiement. Cette approche préventive maintient la cohérence du routing et évite les erreurs de production.

CAS CLIENTS RÉCENTS

Nous concevons des solutions d’entreprise pour compétitivité et excellence opérationnelle

Avec plus de 15 ans d’expérience, notre équipe conçoit logiciels, applications mobiles, plateformes web, micro-services et solutions intégrées. Nous aidons à maîtriser les coûts, augmenter le chiffre d’affaires, enrichir l’expérience utilisateur, optimiser les systèmes d’information et transformer les opérations.

CONTACTEZ-NOUS

Ils nous font confiance

Parlons de vous

Décrivez-nous votre projet et l’un de nos experts vous re-contactera.

ABONNEZ-VOUS

Ne manquez pas les
conseils de nos stratèges

Recevez nos insights, les dernières stratégies digitales et les best practices en matière de transformation digitale, innovation, technologie et cybersécurité.

Transformons vos défis en opportunités

Basée à Genève, l’agence Edana conçoit des solutions digitales sur-mesure pour entreprises et organisations en quête de compétitivité.

Nous combinons stratégie, conseil et excellence technologique pour transformer vos processus métier, votre expérience client et vos performances.

Discutons de vos enjeux stratégiques.

022 596 73 70

Agence Digitale Edana sur LinkedInAgence Digitale Edana sur InstagramAgence Digitale Edana sur Facebook