Structure avancée avec @forward
Pour des projets professionnels, on utilise souvent @forward dans des fichiers index
pour créer une API propre et organisée.
scss/
abstracts/
_colors.scss
_spacing.scss
_typography.scss
_mixins.scss
_index.scss # Fichier index qui réexpose tout
components/
_buttons.scss
_cards.scss
_forms.scss
_index.scss # Fichier index pour les composants
main.scss # Point d'entrée principal
_colors.scss :
// Variables de couleurs
$primary: #3b82f6;
$primary-light: #60a5fa;
$primary-dark: #2563eb;
$secondary: #8b5cf6;
$success: #10b981;
$warning: #f59e0b;
$danger: #ef4444;
$text: #1e293b;
$text-light: #64748b;
$background: #f8fafc;
_spacing.scss :
// Variables d'espacement
$spacing-xs: 4px;
$spacing-sm: 8px;
$spacing-md: 16px;
$spacing-lg: 24px;
$spacing-xl: 32px;
$spacing-xxl: 48px;
abstracts/_index.scss :
// Réexposition des abstracts
@forward 'colors';
@forward 'spacing';
@forward 'typography';
@forward 'mixins' show rounded, shadow, flex-center; // Seulement certains mixins
main.scss :
// Import des modules
@use 'abstracts' as a;
@use 'components' as c;
// Utilisation
body {
background: a.$background;
color: a.$text;
font-family: 'Inter', sans-serif;
padding: a.$spacing-md;
}
.button {
@include c.button-base;
background: a.$primary;
color: white;
padding: a.$spacing-sm a.$spacing-md;
&:hover {
background: a.$primary-dark;
}
}
.card {
@include c.card-base;
border: 1px solid rgba(a.$primary, 0.1);
padding: a.$spacing-lg;
.card-title {
color: a.$primary;
margin-bottom: a.$spacing-md;
}
}
Configuration de modules avec with
@use permet de configurer les variables d'un module à l'importation.
// _config.scss
$primary: #3b82f6 !default;
$secondary: #8b5cf6 !default;
$theme: 'light' !default;
// main.scss
@use 'config' with (
$primary: #7aa7ff, // Surcharge de la valeur par défaut
$theme: 'dark' // Configuration du thème
);
.header {
background: config.$primary; // Utilise #7aa7ff, pas #3b82f6
@if config.$theme == 'dark' {
color: white;
} @else {
color: #1e293b;
}
}
La clause !default dans le module permet de définir des valeurs par défaut
qui peuvent être surchargées avec with.
Migration progressive de @import vers @use
Pour les projets existants, voici une stratégie de migration :
- Étape 1 : Mettre à jour Sass à la version 1.23.0 ou supérieure.
- Étape 2 : Commencer par les nouveaux fichiers en utilisant
@use.
- Étape 3 : Créer des fichiers index avec
@forward pour les modules existants.
- Étape 4 : Remplacer progressivement les
@import par des @use.
- Étape 5 : Utiliser
sass-migrator (outil officiel) pour automatiser la migration.
Conseil terrain
Ne cherche pas à tout migrer d'un coup sur un gros projet.
Commence par une petite partie non critique, teste bien,
puis étends progressivement. La migration peut se faire
sur plusieurs semaines ou mois selon la taille du projet.