forxer/fontawesome-migrator

Package Laravel pour automatiser la migration de Font Awesome 5 vers Font Awesome 6 (Free et Pro)

1.4.0 2025-07-28 07:21 UTC

This package is auto-updated.

Last update: 2025-07-28 11:52:24 UTC


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 :

  1. 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)
  2. 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)

📝 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 :

  1. Vérifiez la documentation Font Awesome 6
  2. Consultez le rapport généré pour les suggestions
  3. 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

  1. Tests : Assurez-vous que tous les tests passent
composer test
  1. Style de code : Formatez le code avec Pint
composer pint
  1. Modernisation : Appliquez les améliorations Rector
composer rector
  1. 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 :

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/nouvelle-fonctionnalite)
  3. Développer en suivant le workflow ci-dessus
  4. Commit vos changements (git commit -am 'Ajout nouvelle fonctionnalité')
  5. Push vers la branche (git push origin feature/nouvelle-fonctionnalite)
  6. 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