Anatomie d'un projet Vuetify

Lors de la création d'un projet Vuetify, il est important de comprendre la structure des fichiers et des dossiers pour bien organiser votre code et faciliter la maintenance.

Voici un aperçu de l'anatomie d'un projet Vuetify typique.

Structure Générale d'un Projet Vuetify

hello-world/                   # Dossier racine du projet Vuetify

├── node_modules/              # Contient les bibliothèques installés avec NPM, dont Vue.js  

├── public/                    # Contient les fichiers accessibles publiquement (images, icônes, pdf)         
│                              #  ne nécesssitant PAS de traitements
├── src/                       # Contient le code source principal de l'application
│   │ 
│   ├── assets/                # Dossier pour les ressources statiques (images, polices, styles CSS, etc.)         
│   │                          #  nécessitant un traitement (regroupement, optimisation, compression, etc.)
│   │
│   ├── components/            # Composants réutilisables de l'application
│   │   ├── AppFooter.vue
│   │   ├── AppHeader.vue
│   │   ├── PokemonListe.vue              
│   │   └── PokemonFiche.vue
│   │
│   ├── layouts/               # Contient les différents mise en pages de l'application
│   │   ├── default.vue
│   │   ├── fullWidth.vue
│   │   └── sideBarLeft.vue        
│   │
│   ├── pages/                 # Composants Vue représentant les différentes pages de l'application
│   │   ├── index.vue          # Page principale de l'application '/'
│   │   ├── contact.vue        # Page de contact '/contact'
│   │   ├── [...path].vue      # Page d'erreur pour les pages introuvable
│   │   └── pokemons/          
│   │       ├── index.vue      # Page d'acceuil des Pokemons '/pokemons'
│   │       └── [nom].vue      # Page de détail d'un Pokemon avec paramètre '/pokemons/pikachu' 
│   │                          #  'pikachu' sera la valeur du paramètre 'nom'
│   │
│   ├── plugins/               # Dossier pour les plugins utilisés dans l'application
│   │
│   ├── router/                # Configuration du routeur Vue (vue-router) pour la navigation entre les pages
│   │   └── index.js           # Fichier de configuration des routes de l'application
│   │
│   ├── stores/                # Contient la gestion d'état globale, le magasins (Vuex ou Pinia)
│   │   ├── app.js             # Store principal pour gérer l'état de l'application
│   │   └── index.js           # Fichier d'index pour initialiser les stores
│   │
│   ├── styles/                # Contient les fichiers de styles globaux
│   │   └── settings.scss      # Fichier de styles SCSS pour la configuration de l'application
│   │
│   ├── App.vue                # Composant racine de l'application
│   └── main.js                # Point d'entrée JavaScript qui initialise Vue et Vuetify

├── index.html                 # Fichier HTML principal servant de point d'entrée pour l'application
├── jsconfig.json              # Configuration du projet JavaScript
├── package-lock.json          # Verrouillage des dépendances installées
├── package.json               # Fichier de configuration du projet avec les dépendances et scripts
└── vite.config.mjs            # Fichier de configuration pour Vite

Conseils pour Organiser Votre Projet Vuetify

  1. Utilisez des composants réutilisables : placez les composants réutilisables (entête et pieds de pages, boutons, cartes, listes, formulaires, etc.) dans le dossier components/.

  2. Divisez votre logique : séparez les pages de l'application dans views/ et les composants spécifiques à ces pages dans components/.

  3. Explorer les composants Vuetify arrow-up-rightavant de créer un composant : ne pas réinventer la roue et parcourir les composants Vuetify avant de créer vos propres composants.

  4. Configurez correctement le thème Vuetifyarrow-up-right : utilisez plugins/vuetify.js pour personnaliser les couleurs, polices, et styles de votre projet.

Les composants Vuetify
Configurer le thème Vuetify

Conclusion

La structure d'un projet Vuetify est conçue pour être modulaire et organisée, facilitant ainsi le développement, la maintenance et l'évolutivité de votre application.

Comprendre cette anatomie vous permettra d'organiser efficacement votre code et de profiter pleinement des fonctionnalités offertes par Vue.js et Vuetify.

Déroulement du chargement d'une application Vue avec Vuetify

Schéma du chargement d'une application Vue classique avec Vuetify
Schéma du chargement d'une application Vue classique avec Vuetify
chevron-rightÉtape 1 : Chargement de index.htmlhashtag

Le processus de démarrage de l'application commence par le chargement du fichier index.html par le navigateur.

Ce fichier contient la structure de base de la page, dont l'élément <div id="app"> où l'application Vue sera montée.

Ce qui se passe ici

  • Le navigateur charge index.html et crée une structure HTML de base.

  • L'élément <div id="app"></div> est un conteneur vide qui sera rempli par notre application Vue.

  • Le script <script type="module" src="/src/main.js"></script> indique au navigateur de démarrer l'application en chargeant main.js.

chevron-rightÉtape 2 : Chargement de src/main.jshashtag

Ensuite, le navigateur charge le fichier main.js, qui est le point d'entrée principal de l'application Vue.

Ce fichier conduit l'initialisation de l'application en chargeant :

  1. Vue → étape 3

  2. les plugins (Composants Vuetify, Thème Vuetify, Pinia et Vue Router) → étape 4

  3. le composant racine App.vue → étape 5

Voici le contenu de votre fichier main.js qui est chargé à la ligne 13 de index.html

Ce qui se passe ici

  • createApp(App): Crée une instance de l'application Vue en utilisant App.vue comme composant racine (le premier composant de l'application).

  • registerPlugins(app): Enregistre et configure les plugins nécessaires pour l'application, notamment Vuetify. Les plugins sont définis dans src/plugins/index.js

  • app.mount('#app'): Monte l'application Vue dans le conteneur <div id="app"></div> défini à la ligne 12 de index.html.

À ce stade, l'application Vue est initialisée, et le composant App.vue est prêt à être affiché.

chevron-rightÉtape 3 : Chargement de Vuehashtag

À ce stade, la bibliothèque Vue elle-même est chargée. C'est le cœur de votre application qui permet de créer des composants réactifs et de gérer les fonctionnalités de Vue.

L'instance Vue est initialisée dans src/main.js avec la fonction createApp() .

chevron-rightÉtape 4 : Chargement des outils, plugins et configurationshashtag

Lors de cette étape, les principaux plugins et configurations de l'application sont chargés :

Toutes ces initialisations sont réalisées dans le fichier src/plugins/index.js.

chevron-rightÉtape 5 : Montage du composant App.vuehashtag

Une fois tous les plugins et éléments de configuration chargés App.vue est monté sur l'élément <div id="app"> dans index.html.

Cela signifie que App.vue prend le contrôle de l'application et agit comme conteneur principal pour le reste des composants et de l'application.

Comme c'est le premier composant de notre application, on l'appelle le composant "root", composant racine en français.

Ce qui se passe ici

  • <v-app> : Composant de base de Vuetify qui enveloppe toute l'application, assurant l'intégration des thèmes et styles.

  • <router-view /> : Place un espace réservé qui affichera le composant correspondant à la route actuelle (par exemple, la page d'accueil).

chevron-rightÉtape 6 : Vue Router détermine le composant à charger en fonction de l'URIhashtag

À ce stade, Vue Router vérifie l'URI de l'application (par exemple, /bulbi) et détermine quel composant Vue doit être chargé pour cette route.

C'est grâce à la configuration des routes que Vue Router sait quel composant est associé à chaque chemin.

Dans ce projet, il détermine le composant à chargé en se basant sur le nom des fichiers et dossier du dossier src/pages/ grâce à la librairie Unplugin Vue Routerarrow-up-right.

La structure ci-dessus génèrera les routes suivantes :

  • /: -> index.vue

  • /about: -> about.vue

  • /users: -> users/index.vue

  • /users/77: -> users/[id].vue crée un paramètre id qui recevra la valeur de l'URI soit 77 dans cet exemple

chevron-rightÉtape 7 : Retour du composant correspondant à la route par Vue Routerhashtag

Vue Router renvoie le composant correspondant à la route actuelle (par exemple, bulbi.vue pour la route /bulbi).

Ce composant est ensuite prêt à être affiché à l'intérieur de l'application.

chevron-rightÉtape 8 : Chargement du composant retourné par Vue Routerhashtag

Le composant correspondant à la route active (bulbi.vue dans cet exemple) est alors chargé et rendu dans la balise <router-view> du composant App.vue.

chevron-rightÉtape 9 : Récupération des données dans Piniahashtag

Une fois que le composant bulbi.vue est monté, il récupère les données dont il a besoin à partir du store Pinia.

Par exemple, toutes les données du Pokémon Bulbizarre :

chevron-rightÉtape 10 : Récupération des composants Vuetifyhashtag

Le composant bulbi.vue utilise les composants Vuetify (v-btn, v-card, v-img, etc.) pour construire l'interface utilisateur, user interface (UI) en anglais.

Ces composants sont stylisés et configurés selon le thème Vuetify chargé précédemment.

Voir tous les composants Vuetifyarrow-up-right

Exemple d'utilisation du composant v-btn

chevron-rightÉtape 11 : Application complète rendue et interactivité assuréehashtag

Enfin, l'application Vue.js est entièrement montée, configurée et rendue dans le navigateur.

L'utilisateur peut interagir avec l'application, naviguer entre les différentes pages grâce à Vue Router, utiliser les composants Vuetify, et voir les données gérées par Pinia en temps réel.

Mis à jour

Ce contenu vous a-t-il été utile ?