Vite Plugin : Générateur de favicons

Vite Plugin : Générateur de favicons

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érez plusieurs formats de favicons à partir d'une seule image source
  • ð§ Options de favicons entièrement configurables
  • ð Injection automatique de HTML dans l'image source index.html
  • ð Répertoire de sortie personnalisé et chemin public
  • ð 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 du logiciel

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

OptionType d'optionDéfautDescription de l'option
sourcestring'src/favicon.png'Chemin d'accès à l'image favicon source
outputDirstring'favicons'Répertoire de sortie pour les favicons générés (relatif à la sortie de la compilation)
publicPathstring'/favicons'Chemin public pour les favicons en HTML
htmlOutputstringundefinedFichier de sortie pour les balises HTML (relatif à la racine du projet)
injectHtmlbooleantrueInjecter ou non des balises HTML dans index.html

Options des favicons

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

OptionType d'optionDéfautDescription de l'option
appNamestringnullNom de votre application
appShortNamestringappNameNom court de votre application
appDescriptionstringnullDescription de votre application
developerNamestringnullVotre nom
developerURLstringnullVotre site web
langstring'en-US'Langue principale pour le nom et le nom court
backgroundstring'#fff'Couleur d'arrière-plan pour les icônes aplaties
theme_colorstring'#fff'Couleur du thème que les agents utilisateurs doivent utiliser
iconsobjectVoir ci-dessousParamè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 compilation

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.