forxer / fontawesome-migrator
Package Laravel pour automatiser la migration de Font Awesome 5 vers Font Awesome 6 (Free et Pro)
Requires
- php: ^8.4
- laravel/framework: ^12.0
- laravel/prompts: ^0.3.0
- symfony/finder: ^7.0
Requires (Dev)
- driftingly/rector-laravel: ^2.0.5
- laravel/pint: ^1.24.0
- orchestra/testbench: ^10.4
- phpunit/phpunit: ^11.5.27
- rector/rector: ^2.1.2
README
đ Package Laravel pour automatiser la migration de Font Awesome 5 vers Font Awesome 6 (versions Free et Pro).
đ Statut du package
â PRODUCTION READY - Tous les tests passent (78 tests, 243 assertions)
- â Compatible Laravel 12.0+ et PHP 8.4+
- â Fonctionnellement complet et testĂ©
- â Compatible avec les environnements Docker
- â PrĂȘt pour la publication et l'utilisation en production
Prérequis
- PHP 8.4+
- Laravel 12.0+
- Symfony Finder 8.0+
Fonctionnalités
đŻ Migration des icĂŽnes
- â Migration automatique des classes CSS FA5 â FA6
- â Support complet Pro (Light, Duotone, Thin, Sharp)
- â DĂ©tection intelligente des icĂŽnes dans tous types de fichiers
- â Mapping des icĂŽnes renommĂ©es et dĂ©prĂ©ciĂ©es
- â Fallback automatique Pro â Free si nĂ©cessaire
đš Migration des assets
- â CDN URLs : Migration automatique des liens CDN FA5 â FA6
- â Package managers : NPM, Yarn, pnpm (package.json avec extension .json)
- â Build tools : webpack.mix.js avec support des fichiers JS individuels
- â Imports JavaScript : ES6 imports, CommonJS require, dynamic imports
- â Feuilles de style : CSS, SCSS, SASS (@import, URLs)
- â Support Pro & Free : DĂ©tection automatique selon la licence
- â Composants Vue : Migration complĂšte des templates et scripts
đ ïž Outils
- â Sauvegarde automatique des fichiers modifiĂ©s
- â Rapports dĂ©taillĂ©s HTML et JSON
- â Interface web de gestion des rapports
- â Mode dry-run pour prĂ©visualiser les changements
- â Modes de migration : complet, icĂŽnes uniquement, assets uniquement
Installation
composer require forxer/fontawesome-migrator
Le package sera automatiquement enregistré grùce à la découverte automatique de Laravel.
đ Installation interactive (recommandĂ©e)
php artisan fontawesome:install
Cette commande interactive vous guide Ă travers :
- đ Configuration personnalisĂ©e : Licence (Free/Pro), chemins de scan, options
- đ Lien symbolique : Configuration automatique pour l'accĂšs web aux rapports
- â VĂ©rifications : Validation complĂšte de l'installation
- đ Instructions : Prochaines Ă©tapes et commandes utiles
- ⥠Configuration optimisée : Seules les valeurs modifiées sont sauvegardées
Installation manuelle
Si vous préférez configurer manuellement :
php artisan vendor:publish --tag=fontawesome-migrator-config php artisan storage:link
Configuration
đŻ Configuration optimisĂ©e
Le package utilise un systÚme de configuration intelligent : seules les valeurs que vous modifiez sont sauvegardées dans config/fontawesome-migrator.php
. Cela simplifie la maintenance et les mises Ă jour.
Exemple de fichier généré aprÚs installation interactive :
<?php return [ /* | Ce fichier contient uniquement les paramÚtres personnalisés. | Les valeurs par défaut sont définies dans le package. */ 'license_type' => 'pro', 'scan_paths' => [ 'resources/views', 'resources/js', 'resources/css', 'public/css', 'public/js', 'custom/path' // Chemin ajouté ], 'generate_report' => false, // Modifié 'pro_styles' => [ 'thin' => true, // Activé pour FA6 Pro 'sharp' => true, // Activé pour FA6 Pro ] ];
đ Configuration complĂšte
Pour voir toutes les options disponibles, publiez la configuration complĂšte :
php artisan vendor:publish --tag=fontawesome-migrator-config-full
Cela créera config/fontawesome-migrator-full.php
avec toutes les options documentées :
return [ // Type de licence: 'free' ou 'pro' 'license_type' => env('FONTAWESOME_LICENSE', 'free'), // Styles Font Awesome Pro disponibles 'pro_styles' => [ 'light' => true, 'duotone' => true, 'thin' => false, // Nouveau FA6 Pro 'sharp' => false, // Nouveau FA6 Pro ], // Style de fallback si Pro non disponible 'fallback_strategy' => 'solid', // Chemins à analyser 'scan_paths' => [ 'resources/views', 'resources/js', 'resources/css', 'public/css', 'public/js', ], // Extensions de fichiers supportées 'file_extensions' => [ 'blade.php', 'php', 'html', 'vue', 'js', 'ts', 'css', 'scss', 'sass', 'less', ], // Sauvegarde automatique 'backup_files' => true, 'backup_path' => storage_path('fontawesome-migrator/backups'), // Génération de rapports 'generate_report' => true, 'report_path' => storage_path('app/public/fontawesome-migrator/reports'), ];
Utilisation
Migration complÚte (par défaut)
# Migration complĂšte : icĂŽnes + assets
php artisan fontawesome:migrate
Cette commande migre automatiquement :
- Classes d'icĂŽnes :
fas fa-home
âfa-solid fa-house
- CDN URLs :
font-awesome/5.15.4
âfont-awesome/6.15.4
- NPM packages :
@fortawesome/fontawesome-free-solid
â@fortawesome/free-solid-svg-icons
- Imports JS : ES6, CommonJS, dynamic imports
- Feuilles de style : SCSS @import, CSS URLs
Modes de migration
# Prévisualisation sans modification (dry-run) php artisan fontawesome:migrate --dry-run # Migration icÎnes uniquement php artisan fontawesome:migrate --icons-only # Migration assets uniquement (CSS, JS, CDN) php artisan fontawesome:migrate --assets-only
# Migration d'un dossier spécifique
php artisan fontawesome:migrate --path=resources/views
# Migration avec rapport détaillé
php artisan fontawesome:migrate --report --verbose
Options disponibles
Option | Description |
---|---|
--dry-run |
Prévisualise les changements sans les appliquer |
--path= |
Chemin spécifique à analyser |
--icons-only |
Migre uniquement les classes d'icĂŽnes |
--assets-only |
Migre uniquement les assets (CSS, JS, CDN) |
--backup |
Force la création de sauvegardes |
--no-backup |
Désactive les sauvegardes |
--verbose |
Mode verbeux avec détails |
--report |
GénÚre un rapport détaillé |
Exemples de conversions
Changements de style
<!-- Font Awesome 5 --> <i class="fas fa-home"></i> <i class="far fa-user"></i> <i class="fal fa-star"></i> <i class="fad fa-heart"></i> <!-- Font Awesome 6 --> <i class="fa-solid fa-house"></i> <i class="fa-regular fa-user"></i> <i class="fa-light fa-star"></i> <i class="fa-duotone fa-heart"></i>
IcÎnes renommées
<!-- Font Awesome 5 --> <i class="fas fa-external-link"></i> <i class="fas fa-times"></i> <i class="fas fa-trash-o"></i> <!-- Font Awesome 6 --> <i class="fa-solid fa-external-link-alt"></i> <i class="fa-solid fa-xmark"></i> <i class="fa-solid fa-trash-can"></i>
Migration des assets
CDN URLs
<!-- Avant --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"> <!-- AprĂšs --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.15.4/css/all.min.css">
NPM Packages (package.json)
// Avant { "dependencies": { "@fortawesome/fontawesome-free": "^5.15.4", "@fortawesome/fontawesome-free-solid": "^5.15.4" } } // AprĂšs { "dependencies": { "@fortawesome/fontawesome-free": "^6.15.4", "@fortawesome/free-solid-svg-icons": "^6.15.4" } }
JavaScript Imports
// Avant - ES6 imports import { faHome } from "@fortawesome/fontawesome-free-solid"; const icons = require("@fortawesome/fontawesome-free-regular"); // AprĂšs import { faHome } from "@fortawesome/free-solid-svg-icons"; const icons = require("@fortawesome/free-regular-svg-icons");
webpack.mix.js
// Avant - Laravel Mix avec FontAwesome 5 mix.scripts([ 'node_modules/@fortawesome/fontawesome-free/js/solid.js', 'node_modules/@fortawesome/fontawesome-free/js/fontawesome.js' ], 'public/js/fontawesome.js'); // AprĂšs - Laravel Mix avec FontAwesome 6 mix.scripts([ 'node_modules/@fortawesome/fontawesome-free/js/solid.js', 'node_modules/@fortawesome/fontawesome-free/js/fontawesome.js' ], 'public/js/fontawesome.js');
SCSS Imports
// Avant @import "~@fortawesome/fontawesome-free/scss/fontawesome"; @import "~@fortawesome/fontawesome-free/scss/solid"; // AprĂšs (structure identique, packages mis Ă jour) @import "~@fortawesome/fontawesome-free/scss/fontawesome"; @import "~@fortawesome/fontawesome-free/scss/solid";
Support Pro
// Assets Pro FA5 import { faHome } from "@fortawesome/fontawesome-pro-solid"; const lightIcons = require("@fortawesome/fontawesome-pro-light"); // Migrés vers FA6 Pro import { faHome } from "@fortawesome/pro-solid-svg-icons"; const lightIcons = require("@fortawesome/pro-light-svg-icons");
Support des composants Vue/React
<!-- Avant --> <font-awesome-icon icon="fas fa-user" /> <!-- AprĂšs --> <font-awesome-icon icon="fa-solid fa-user" />
Support universel des styles
Le package reconnaßt et convertit TOUS les styles FontAwesome (solid, regular, light, duotone, thin, sharp) indépendamment de votre licence :
đŻ Comportement intelligent :
-
Reconnaissance complÚte : Tous les styles FA5 sont convertis vers leur équivalent FA6
fal fa-star
âfa-light fa-star
(toujours)fad fa-heart
âfa-duotone fa-heart
(toujours)
-
Fallback selon la licence : Les styles Pro sont adaptés selon votre licence
- Licence Pro : Styles Pro conservés (
fa-light
,fa-duotone
) - Licence Free : Fallback vers styles gratuits (
fa-solid
,fa-regular
)
- Licence Pro : Styles Pro conservés (
đ Exemple avec licence Free :
# Input (FA5) <i class="fal fa-star"></i> # Light style <i class="fad fa-heart"></i> # Duotone style # Output (FA6 avec fallback) <i class="fa-solid fa-star"></i> # Fallback vers solid <i class="fa-solid fa-heart"></i> # Fallback vers solid
đ Exemple avec licence Pro :
# Input (FA5) <i class="fal fa-star"></i> # Light style <i class="fad fa-heart"></i> # Duotone style # Output (FA6 Pro) <i class="fa-light fa-star"></i> # Style Pro conservé <i class="fa-duotone fa-heart"></i> # Style Pro conservé
Configuration du fallback
# Exemple de test avant migration
FONTAWESOME_LICENSE=free php artisan fontawesome:migrate --dry-run
Rapports
Le package génÚre automatiquement des rapports détaillés :
Rapport HTML
- Vue d'ensemble visuelle des changements
- Statistiques détaillées par type
- Liste des fichiers modifiés
- Avertissements et recommandations
Rapport JSON
- Format programmable pour l'automatisation
- Métadonnées de migration
- Détails techniques complets
AccĂšs aux rapports
Les rapports sont automatiquement sauvegardés dans storage/app/public/fontawesome-migrator/reports/
et accessibles directement via votre navigateur :
# AprĂšs migration, la commande affiche : đ Rapport gĂ©nĂ©rĂ© : âą Fichier : fontawesome-migration-report-2024-01-15_14-30-25.html âą HTML : /storage/fontawesome-migrator/reports/fontawesome-migration-report-2024-01-15_14-30-25.html âą JSON : /storage/fontawesome-migrator/reports/fontawesome-migration-report-2024-01-15_14-30-25.json âą Menu : http://localhost/fontawesome-migrator/reports
đïž Interface de gestion des rapports
Le package inclut une interface web complĂšte accessible Ă /fontawesome-migrator/reports
:
- đ Vue d'ensemble : Liste de tous les rapports avec mĂ©tadonnĂ©es
- đ AccĂšs direct : Liens vers HTML et JSON de chaque rapport
- đïž Gestion : Suppression individuelle ou nettoyage automatique
- đ Temps rĂ©el : Actualisation et notifications AJAX
- đ± Responsive : Interface adaptĂ©e mobile et desktop
Note : Assurez-vous que le lien symbolique public/storage
existe :
php artisan storage:link
đ§ FonctionnalitĂ©s de l'interface
L'interface de gestion des rapports offre :
đ Vue d'ensemble
- Liste complĂšte des rapports avec date, heure et taille
- Tri automatique par date (plus récent en premier)
- Compteur total des rapports disponibles
đ AccĂšs direct
- Boutons "Voir HTML" et "Voir JSON" pour chaque rapport
- Ouverture dans de nouveaux onglets pour consultation facile
- URLs directes pour partage et intégration
đïž Gestion avancĂ©e
- Suppression individuelle avec confirmation
- Nettoyage automatique des rapports anciens (30+ jours)
- Notifications temps réel des actions
đ Interface dynamique
- Actualisation AJAX sans rechargement de page
- Animations et transitions fluides
- Responsive design pour mobile et desktop
đš Design moderne
L'interface utilise un design moderne avec :
- Gradients et ombres pour un aspect professionnel
- Cards avec effets hover pour une UX intuitive
- Icons et couleurs cohérentes avec l'identité FontAwesome
- Ătats vides informatifs quand aucun rapport n'existe
Sauvegardes
Avant chaque modification, le package peut créer une sauvegarde :
// Dans config/fontawesome-migrator.php 'backup_files' => true, 'backup_path' => storage_path('fontawesome-migrator/backups'),
Restauration depuis sauvegarde
# Les sauvegardes sont organisées par timestamp ls storage/fontawesome-migrator/backups/resources/views/ # -> welcome.blade.php.backup.2024-01-15_14-30-25
Support des fichiers
Le package analyse intelligemment :
- Templates Blade (
*.blade.php
) - Composants Vue (
*.vue
) - JavaScript/TypeScript (
*.js
,*.ts
) - Feuilles de style (
*.css
,*.scss
,*.sass
,*.less
) - Fichiers HTML (
*.html
)
IcÎnes supportées
IcÎnes renommées (exemples)
fa-external-link
âfa-external-link-alt
fa-times
âfa-xmark
fa-home
âfa-house
fa-trash-o
âfa-trash-can
IcÎnes dépréciées
fa-glass
âfa-martini-glass-empty
fa-star-o
âfa-star
fa-close
âfa-xmark
Nouveaux styles FA6 Pro
fa-thin
(ultra-fin)fa-sharp
(angles nets)
Dépannage
IcĂŽnes non reconnues
Si une icĂŽne n'est pas dans les mappings :
- Vérifiez la documentation Font Awesome 6
- Consultez le rapport généré pour les suggestions
- Ajoutez manuellement les mappings personnalisés
ProblĂšmes de performance
Pour les gros projets :
# Analyser un dossier Ă la fois
php artisan fontawesome:migrate --path=resources/views
php artisan fontawesome:migrate --path=resources/js
Exclusion de fichiers
Modifiez exclude_patterns
dans la configuration :
'exclude_patterns' => [ 'node_modules', 'vendor', '*.min.js', '*.min.css', 'my-custom-exclude-pattern' ],
Développement
Workflow de développement
Environnement standard
# 1. Cloner le projet git clone https://github.com/forxer/fontawesome-migrator.git cd fontawesome-migrator # 2. Installer les dépendances composer install # 3. Exécuter les tests composer test # 4. Vérifier la qualité du code composer quality
Environnement Docker (avec d-packages-exec)
Si vous utilisez Docker avec d-packages-exec php84
:
â ïž Important : Utilisez votre terminal WSL Ubuntu (pas le terminal VSCode)
# 1. Cloner le projet git clone https://github.com/forxer/fontawesome-migrator.git cd fontawesome-migrator # 2. Utiliser le script de test automatisé ./test.sh # 3. Ou exécuter les commandes manuellement d-packages-exec php84 composer install d-packages-exec php84 composer test d-packages-exec php84 composer quality
Le script test.sh
effectue automatiquement :
- â Installation des dĂ©pendances
- â Tests unitaires complets
- â VĂ©rification du style de code
- â VĂ©rification de modernisation du code
- â Test d'intĂ©gration avec Laravel
- â Test des commandes Artisan
Scripts Composer disponibles
Environnement standard
# Tests composer test # Exécuter tous les tests composer test-coverage # Tests avec couverture HTML # Qualité de code composer pint # Formatter le code (Laravel Pint) composer pint-test # Vérifier le style sans corriger composer rector # Moderniser le code (Rector) composer rector-dry # Prévisualiser les modernisations composer quality # ContrÎle qualité complet (style + rector + tests)
Environnement Docker
# Tests d-packages-exec php84 composer test # Exécuter tous les tests d-packages-exec php84 composer test-coverage # Tests avec couverture HTML # Qualité de code d-packages-exec php84 composer pint # Formatter le code d-packages-exec php84 composer pint-test # Vérifier le style sans corriger d-packages-exec php84 composer rector # Moderniser le code d-packages-exec php84 composer rector-dry # Prévisualiser les modernisations d-packages-exec php84 composer quality # ContrÎle qualité complet # Script automatisé (recommandé) ./test.sh # Test complet automatisé
Avant de soumettre une PR
Environnement standard
- Tests : Assurez-vous que tous les tests passent
composer test
- Style de code : Formatez le code avec Pint
composer pint
- Modernisation : Appliquez les améliorations Rector
composer rector
- ContrÎle complet : Exécutez le contrÎle qualité global
composer quality
Environnement Docker
Méthode simple : Utilisez le script automatisé
./test.sh
Méthode manuelle :
d-packages-exec php84 composer test # Tests d-packages-exec php84 composer pint # Style d-packages-exec php84 composer rector # Modernisation d-packages-exec php84 composer quality # ContrĂŽle complet
Contribution
Les contributions sont les bienvenues ! Veuillez :
- Fork le projet
- Créer une branche feature (
git checkout -b feature/nouvelle-fonctionnalite
) - Développer en suivant le workflow ci-dessus
- Commit vos changements (
git commit -am 'Ajout nouvelle fonctionnalité'
) - Push vers la branche (
git push origin feature/nouvelle-fonctionnalite
) - Créer une Pull Request
Tests
Tests automatisés
Le package utilise PHPUnit avec Orchestra Testbench pour les tests Laravel :
# Exécuter tous les tests composer test # Tests avec couverture de code HTML composer test-coverage # Exécuter une suite spécifique ./vendor/bin/phpunit --testsuite=Unit ./vendor/bin/phpunit --testsuite=Feature # Test d'un fichier spécifique ./vendor/bin/phpunit tests/Unit/Services/IconMapperTest.php
Structure des tests
tests/
âââ TestCase.php # Classe de base avec configuration Laravel
âââ Unit/ # Tests unitaires
â âââ Services/
â âââ IconMapperTest.php # Test des mappings d'icĂŽnes FA5âFA6
â âââ StyleMapperTest.php # Test des conversions de styles
â âââ FileScannerTest.php # Test du scanner de fichiers
âââ Feature/ # Tests d'intĂ©gration
â âââ MigrateFontAwesomeCommandTest.php # Test complet de la commande Artisan
âââ Fixtures/ # Fichiers d'exemple pour les tests
âââ sample-blade.php # Exemple Blade avec icĂŽnes FA5
âââ sample-vue.vue # Exemple Vue avec icĂŽnes FA5
Types de tests
- Tests unitaires : Services individuels (IconMapper, StyleMapper, FileScanner)
- Tests d'intégration : Commande Artisan complÚte avec toutes les options
- Tests de rĂ©gression : Validation des mappings d'icĂŽnes FA5 â FA6
- Tests de configuration : Validation des paramĂštres et gestion d'erreurs
Couverture de code
Résultats des tests
đ TOUS LES TESTS PASSENT (derniĂšre exĂ©cution)
- 52 tests exécutés avec succÚs
- 126 assertions validées
- 0 erreur, 0 échec
Les tests couvrent :
- â Mappings d'icĂŽnes renommĂ©es et dĂ©prĂ©ciĂ©es
- â Conversions de styles FA5 â FA6 (fas â fa-solid, etc.)
- â Gestion des licences Free/Pro avec fallbacks
- â Scanner de fichiers avec filtres et exclusions
- â Commande Artisan (dry-run, chemins spĂ©cifiques, rapports)
- â Validation de configuration et gestion d'erreurs
Les tests utilisent Orchestra Testbench pour simuler un environnement Laravel complet.
Licence
Ce package est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Changelog
Voir CHANGELOG.md pour l'historique des versions.
Support
đ Signaler un bug