📋 À propos
Cette routine constitue une base commune à toutes nos typologies de projets (statique, Nuxt, WordPress). Elle standardise l’environnement, les outils de qualité, la structure CSS et les options liées.
Sommaire
💡 Important :
- Dans la majorité des projets “simples”, l’étape 2 (fichiers de configuration) n’est pas nécessaire car Vite génère l’essentiel.
- Cas des projets “multi” (mono-repo) avec une partie front (Vite) et d’autres parties au sein du même dépôt: réaliser l’étape 2 (fichiers de configuration) avant l’étape 1 (Vite).
Stack commune à tous les projets
Environnement / compilation
- pnpm : gestionnaire de paquets
- Vite : bundler/outil de compilation
Linters / qualité
- Editorconfig : indentation, encodage, EOL
- Prettier : formatage automatique
- Stylelint : vérification CSS
- ESLint : vérification JavaScript/TypeScript (+ frameworks)
1. Vite
1) Se placer à la racine et créer un projet
pnpm create vite
# choisir le nom du projet
# sélectionner "Vanilla + JavaScript" (ou "TypeScript")
cd <vite-project>
pnpm install
1) Ajouter la configuration Vite
- Ajouter
vite.config.tsdans le dossier du projet (ex. vite-project)
1) Nettoyer les fichiers d’exemple
- Supprimer:
counter.js,javascript.svg,public/vite.svg - Renommer
style.cssenstyles.css - Nettoyer
main.jspour ne conserver que l’import CSS - Dans
index.html: définirlang="fr", ajuster<title>, supprimer le favicon<link rel="icon">
1) Utiliser le dossier public/ pour les assets statiques
Tâches Vite
pnpm dev # démarrer le serveur de développement
pnpm build # compiler la version de production (dossier dist/)
2. Fichiers de configuration
Note: la plupart sont générés automatiquement par Vite. Vérifier leur présence.
1) Pré-requis
# installer pnpm s'il n'est pas présent
npm install -g pnpm
# créer un dossier racine si besoin
mkdir projet && cd projet
# initialiser le package
pnpm init
1) Fichiers racine
- Ajouter
.gitignore(et optionnellement.dockerignore) - Ajouter
README.md - Ajouter
.editorconfig(installer l’extension VS Code “EditorConfig”)
1) Dossier VS Code
- Créer
.vscode/ - Ajouter
settings.jsonetextensions.json
3. Linter, formatters et correcteurs
On installe les linters après avoir choisi le type de projet (vanilla, Vue/Nuxt, WordPress).
1) ESLint (JS/TS)
pnpm create @eslint/config@latest
- Utiliser la configuration adaptée au projet
- Base par défaut
- Vue: https://eslint.vuejs.org/
- Nuxt: https://nuxt.com/modules/eslint
- Extension VS Code: “ESLint”
1) Prettier (formatteur)
pnpm install --save-dev prettier
- Extension VS Code: “Prettier - Code formatter” (⚠️ la bonne version de Prettier est
esbenp.prettier-vscodeet nonprettier.prettier-vscode) - Ajouter
.prettier.config.mjsà la racine
1) Stylelint (CSS)
pnpm install --save-dev stylelint stylelint-config-standard stylelint-config-html stylelint-order stylelint-config-property-sort-order-smacss
- Extension VS Code: “Stylelint”
- Ajouter
stylelint.config.mjsà la racine - Dans VS Code (cmd+,), ajouter:
"stylelint.validate": ["css", "scss", "html", "vue"]
💡 Important : Relancer VS Code pour activer les linters: cmd+maj+p → “Reload Window”
4. Styles CSS
app.css
Le fichier app.css est le point d’entrée.
Il charge les feuilles dans l’ordre des layers CSS: config, base, components, utilities.
1) Layer config (reset, polices, thèmes, layouts)
reset.css: reset moderne + printnatives.css: styles natifs des éléments HTMLlayouts.css: utilitaires de disposition (Bretzel)theme.css: primitives et tokens issues de Figma
Voir Guidelines CSS
1) Layer base
styles.css: styles globaux du projet (gabarits, typo, liens, etc.)
1) Layer components
- Feuilles de styles des composants
1) Layer utilities
- Tailwind et/ou utilitaires personnalisés
📚 Outil : Primary est un configurateur CSS pour les projets Alsacréations. Il permet de générer des fichiers CSS conformes aux normes de l'équipe.
5. Custom Media Queries (optionnel)
Installer le plugin PostCSS Custom Media (https://www.npmjs.com/package/postcss-custom-media):
pnpm add --save-dev postcss-custom-media
Ajouter postcss.config.mjs:
export default {
plugins: {
"postcss-custom-media": {
/* plugin options */
},
},
}
Déclarer les breakpoints du projet:
/* assets/css/theme.css */
@custom-media --md (width >= 48rem); /* 768px */
@custom-media --lg (width >= 64rem); /* 1024px */
@custom-media --xl (width >= 80rem); /* 1280px */
@custom-media --xxl (width >= 96rem); /* 1536px */
Utilisation dans les règles (syntaxe moderne des plages):
.toc {
padding: var(--spacing-s);
border-radius: var(--radius-md);
@media (--lg) {
position: fixed;
top: var(--spacing-m);
left: var(--spacing-s);
}
}
Remplacement effectué à la compilation:
@media (--md) { /* … */ }
/* devient */
@media (width >= 48rem) { /* … */ }
Avantages
- Centralisation des seuils (un seul fichier)
- Lisibilité (noms explicites
--md,--lg,--xl) - Cohérence (mêmes breakpoints partout)
6. Autres Options (selon projets)
-
Tailwind : Se placer dans le dossier Vite (
cd vite-project). Suivre l’installation via Vite: https://tailwindcss.com/docs/installation/using-vite - Sass
pnpm install --save-dev sass
# renommer styles.css -> styles.scss
# adapter l'import dans main.js
- Alpine.js
pnpm install --save alpinejs
- Docker (recette / pré-production)
- Ajouter
Dockerfileetdocker-compose.ymldepuis les exemples et les adapter - Mise en production (optionnel):
docker-compose up -d --build
- Ajouter
Nuxt
Cas spécifique de Nuxt, qui embarque déjà Vite.
- On initialise avec la méthode classique :
pnpm create nuxt@latest <project-name>. - On ajoute les dossiers dans
app/:assets,components,layouts,pages.
Le fichier app/app.vue :
<template>
<NuxtRouteAnnouncer />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
Le fichier app/layouts/default.vue :
<template>
<div>
(le header qui peut être un composant)
<NuxtPage />
(le footer qui peut être un composant)
</div>
</template>
Ensuite on ajoute les pages dans app/pages/ (par exemple index.vue) et les composants dans app/components/. Les styles sont ajoutés dans chaque composant ou dans app/assets/styles/ et importés dans nuxt.config.ts :
export default defineNuxtConfig({
css: ['~/assets/styles/app.css'],
...
})