Skip to content

faviconManager

Manage website favicon links injection into HTML files during Vite build.

Import Methods

typescript
// Submodule import (recommended)
import { faviconManager } from '@meng-xi/vite-plugin/plugins/favicon-manager'

// Barrel import
import { faviconManager } from '@meng-xi/vite-plugin'

Quick Start

typescript
import { defineConfig } from 'vite'
import { faviconManager } from '@meng-xi/vite-plugin'

export default defineConfig({
	plugins: [faviconManager({ base: '/assets' })]
})

You can also pass a string as the base path:

typescript
export default defineConfig({
	plugins: [faviconManager('/assets')]
})

Options

OptionTypeDefaultDescription
basestring'/'Icon base path
urlstring-Full icon URL (overrides base + favicon.ico)
linkstring-Custom link tag HTML (highest priority)
iconsIcon[]-Custom icon array
copyOptionsCopyOptions-Icon file copy config
enabledbooleantrueEnable the plugin
verbosebooleantrueShow detailed logs
errorStrategy'throw' | 'log' | 'ignore''throw'Error handling strategy

copyOptions

OptionTypeDefaultDescription
sourceDirstringRequiredSource directory
targetDirstringRequiredTarget directory
overwritebooleantrueOverwrite existing files
recursivebooleantrueRecursive copy

Priority

link > icons > url > base + favicon.ico

Examples

Custom Icon Array

typescript
faviconManager({
	icons: [
		{ rel: 'icon', href: '/favicon.svg', type: 'image/svg+xml' },
		{ rel: 'icon', href: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' },
		{ rel: 'icon', href: '/favicon-16x16.png', sizes: '16x16', type: 'image/png' }
	]
})

Full URL

typescript
faviconManager({
	url: 'https://example.com/favicon.ico'
})
typescript
faviconManager({
	link: '<link rel="icon" href="/custom.ico" type="image/x-icon">'
})

With File Copy

typescript
faviconManager({
	base: '/assets',
	copyOptions: {
		sourceDir: 'src/assets/icons',
		targetDir: 'dist/assets/icons'
	}
})

Full Configuration

typescript
faviconManager({
	base: '/assets',
	enabled: true,
	verbose: true,
	copyOptions: {
		sourceDir: 'src/assets/icons',
		targetDir: 'dist/assets/icons',
		overwrite: true,
		recursive: true
	}
})

Notes

  • Icon links are injected before the </head> tag
  • Skips injection with warning if </head> is not found
  • copyOptions uses incremental copy by default
  • Incomplete copyOptions throws validation error

Released under the MIT License.