Skip to content

injectIco

Inject website icon links into HTML files during Vite build.

Quick Start

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

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

You can also pass a string as the base path:

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

Options

OptionTypeDefaultDescription
basestring'/'Icon base path
urlstring-Full icon URL
linkstring-Custom link tag HTML
iconsIconConfig[]-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
injectIco({
	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
injectIco({
	url: 'https://example.com/favicon.ico'
})
typescript
injectIco({
	link: '<link rel="icon" href="/custom.ico" type="image/x-icon">'
})

With File Copy

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

Full Configuration

typescript
injectIco({
	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.