Vite Plugin : Générateur de favicons

Vite Plugin: Favicon Generator

Un plugin Vite qui génère automatiquement des favicons à partir d'une image source en utilisant la puissante bibliothèque de favicons.

Caractéristiques

  • 🎯 Générer plusieurs formats de favicons à partir d'une seule image source
  • 🔧 Options de favicons entièrement configurables
  • 🚀 Injection automatique de HTML dans les favicons index.html
  • 📁 Répertoire de sortie et chemin public personnalisés
  • 🔄 Support du serveur de développement avec service en mémoire
  • 📝 Génération optionnelle d'un fichier de balises HTML
  • 🎨 Prise en charge des favicons Android, Apple et standard

Installation de l'application

npm install vite-plugin-favicon-generator --save-dev
# or
yarn add vite-plugin-favicon-generator --dev
# or
pnpm add vite-plugin-favicon-generator --save-dev

Utilisation

Utilisation de base

// vite.config.js
import { defineConfig } from 'vite'
import faviconPlugin from 'vite-plugin-favicon-generator'

export default defineConfig({
  plugins: [
    faviconPlugin({
      source: 'src/assets/favicon.png', // Source favicon image
      appName: 'My App',
      theme_color: '#1a1065',
      background: '#ffffff',
    })
  ]
})

Configuration avancée

// vite.config.js
import { defineConfig } from 'vite'
import faviconPlugin from 'vite-plugin-favicon-generator'

export default defineConfig({
  plugins: [
    faviconPlugin({
      // Source image
      source: 'src/assets/favicon.png',
      
      // Output configuration
      outputDir: 'icons', // Output directory (relative to dist)
      publicPath: '/icons', // Public path for HTML links
      htmlOutput: 'src/favicon-tags.html', // Generate HTML tags file
      injectHtml: true, // Auto-inject into index.html
      
      // Favicon configuration (same as favicons library)
      appName: 'My Awesome App',
      appShortName: 'MyApp',
      appDescription: 'My awesome application description',
      developerName: 'Your Name',
      developerURL: 'https://yoursite.com',
      lang: 'en-US',
      theme_color: '#1a1065',
      background: '#ffffff',
      
      // Icon types to generate
      icons: {
        android: true,              // Android homescreen icon
        appleIcon: true,           // Apple touch icons
        appleStartup: false,       // Apple startup images
        favicons: true,            // Regular favicons
        windows: false,            // Windows 8 tile icons
        yandex: false,             // Yandex browser icon
      },
      
      // Platform-specific options
      android: {
        offset: 10,
        background: '#ffffff'
      },
      appleIcon: {
        offset: 10,
        background: '#ffffff'
      }
    })
  ]
})

Options de configuration

Options du plugin

Option Type d'option Défaut Description de l'option
source string 'src/favicon.png' Chemin d'accès à l'image favicon source
outputDir string 'favicons' Répertoire de sortie pour les favicons générés (relatif à la sortie de la compilation)
publicPath string '/favicons' Chemin public pour les favicons en HTML
htmlOutput string undefined Fichier de sortie pour les balises HTML (relatif à la racine du projet)
injectHtml boolean true Injecter ou non des balises HTML dans index.html

Options des favicons

Toutes les options de la bibliothèque favicons sont supportées :

Option Type d'option Défaut Description de l'option
appName string null Nom de votre application
appShortName string appName Nom court de votre application
appDescription string null Description de votre application
developerName string null Votre nom
developerURL string null Votre site web
lang string 'en-US' Langue principale pour le nom et le nom court
background string '#fff' Couleur d'arrière-plan pour les icônes aplaties
theme_color string '#fff' Couleur du thème que les agents utilisateurs doivent utiliser
icons object Voir ci-dessous Paramètres des icônes spécifiques à la plate-forme

Configuration des icônes

icons: {
  android: true,              // Create Android homescreen icon
  appleIcon: true,           // Create Apple touch icons  
  appleStartup: false,       // Create Apple startup images
  favicons: true,            // Create regular favicons
  windows: false,            // Create Windows 8 tile icons
  yandex: false,             // Create Yandex browser icon
}

Chaque type d'icône peut également accepter un objet avec les propriétés offset et background:

icons: {
  android: {
    offset: 10,
    background: '#ffffff'
  },
  appleIcon: {
    offset: 15,
    background: 'transparent'
  }
}

Exemples

React + TypeScript

// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import faviconPlugin from 'vite-plugin-favicon-generator'

export default defineConfig({
  plugins: [
    react(),
    faviconPlugin({
      source: 'src/assets/logo.png',
      appName: 'React App',
      appDescription: 'My React application',
      theme_color: '#646cff',
      background: '#ffffff',
      icons: {
        android: true,
        appleIcon: true,
        favicons: true,
      }
    })
  ]
})

Vue.js

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import faviconPlugin from 'vite-plugin-favicon-generator'

export default defineConfig({
  plugins: [
    vue(),
    faviconPlugin({
      source: 'src/assets/favicon.png',
      appName: 'Vue App',
      theme_color: '#4fc08d',
      background: '#ffffff',
    })
  ]
})

Laravel

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import faviconPlugin from 'vite-plugin-favicon-generator'

export default defineConfig({
  plugins: [
    laravel(),
    faviconPlugin({
        source: 'resources/images/favicon.png',
        outputDir: 'public/favicons',
        publicPath: '/favicons',
        htmlOutput: 'resources/views/favicons.blade.php',
        injectHtml: false,
        icons: {
            android: true,
            appleIcon: true,
            appleStartup: false,
            favicons: true,
            windows: false,
            yandex: false,
        },
    })
  ]
})
{{-- layout.blade.php --}}
@if(file_exists(resource_path('views/favicons.blade.php')))
    @include('favicons')
@endif

Sortie personnalisée et génération HTML

faviconPlugin({
  source: 'assets/icon.png',
  outputDir: 'static/icons',
  publicPath: '/static/icons',
  htmlOutput: 'public/favicon-meta.html',
  injectHtml: false, // Don't auto-inject, use the HTML file instead
  appName: 'My Custom App',
})

Développement et production

  • Développement: Les favicons sont générés en mémoire et servis via un middleware
  • Production: Les favicons sont générés en tant que fichiers statiques dans le répertoire de sortie de la construction

Exigences

  • Node.js >= 18
  • Vite >= 5.0.0

Contribuer

Veuillez soumettre des bugs ou des demandes de fonctionnalités via les issues de Github.

Les pull requests sont les bienvenues !

Merci d'avance !

Licence

Ce projet est un logiciel open-source sous licence MIT.

Vous êtes libre de l'utiliser, de le modifier et de le distribuer dans vos projets, tant que vous respectez les termes de la licence.