Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

vite-plugin-favicon2

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vite-plugin-favicon2

Create and manage favicons for vite bundles, mostly compatible with the config of favicons-webpack-plugin

  • 1.1.5
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2.5K
increased by3.53%
Maintainers
1
Weekly downloads
 
Created
Source

Favicons Vite Plugin

This is a fork of josh-hemphill/vite-plugin-favicon. It was forked and published on npm under vite-plugin-favicon2 in order to address the following issues/features:

  • #1 - Doesn't appear to work in dev mode
  • #3 - Allow vite-plugin-favicon to save the HTML to a file
  • Un-deprecated the outputPath config setting, to allow you to specify where the output assets are saved, relative to the Vite assets directory

Install with:

npm install --save-dev vite-plugin-favicon2

Add the plugin to your vite config as follows:

const ViteFaviconsPlugin = require('vite-plugin-favicon2')
// or ESM
import { ViteFaviconsPlugin } from "vite-plugin-favicon2";

...and then add to your vite.config.js:

plugins: [
  ViteFaviconsPlugin({
	/** Your source logo (Will default to )
		@default "assets/logo.png"
	 */
	logo?: string,
	/** Inject html links/metadata -- set to `false` to generate a webapp.html` file.
		@default true
	 */
	inject?: boolean,
	/** `Favicons` configuration options
	 *  - [See `favicons` documentation](https://github.com/itgalaxy/favicons)
	 */
	favicons?: FaviconsConfig,
	/** The root of the project from which you want to load metadata
		@default process.cwd()
	 */
	projectRoot?: string,
	/** Output Path for the favicon images & files, relative to the Vite assets directory
	 */
	outputPath?: string,
	/** prefix is delegated to Rollup/Vite (keeping for people migrating from Webpack)
	 * @deprecated
	 */
	prefix?: string,
	/** Caching is delegated to Rollup/Vite (keeping for people migrating from Webpack)
	 * @deprecated
	 */
	cache?: boolean,
	/** Public Path is delegated to Rollup/Vite (keeping for people migrating from Webpack)
	 * @deprecated
	 */
	publicPath?: string,
  })
]

The original README.md follows, unmodified:


Leverages on favicons to automatically generate your favicons for you. And if you want to also consolidate your PWA manifest, will generate that as well with linked icons.

Partially adapted from and config compatible with favicons-webpack-plugin

Installation

Install the plugin with npm:

$ npm install --save-dev vite-plugin-favicon
# Or shorthand
npm i -D vite-plugin-favicon

Zero Config Usage

Add your base logo as logo.png file to your assets folder.

Add the plugin to your vite config as follows:

const ViteFaviconsPlugin = require('vite-plugin-favicon')
// or ESM
import { ViteFaviconsPlugin } from 'vite-plugin-favicon';

plugins: [
  ViteFaviconsPlugin()
]

Basic Usage

Add the plugin to your vite config as follows:

const ViteFaviconsPlugin = require('vite-plugin-favicon')
// or ESM
import { ViteFaviconsPlugin } from "module";

...

plugins: [
  ViteFaviconsPlugin('/path/to/logo.png') // svg works too!
]

The default configuration will automatically generate webapp manifest files along with 44 different icon formats as appropriate for iOS devices, Android devices, Windows Phone and various desktop browsers out of your single logo.png.

Tip: You might want to fine tune what vendors to support.

A Note on Path Resolution

Under the hood, Vite/Rollup resolve the paths to the logo and favicons according to the following rules:

  • If /path/to/logo is absolute, there is nothing to resolve and the path specified is used as is.

  • If ./path/to/logo is relative, it's resolved with respect to process.cwd().

HTML Injection

In combination with Vite's html plugin hooks it will also inject the necessary html for you:

<link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="167x167" href="/assets/apple-touch-icon-167x167.png">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon-180x180.png">
<link rel="apple-touch-icon" sizes="1024x1024" href="/assets/apple-touch-icon-1024x1024.png">
<link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-320x460.png">
<link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x920.png">
<link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-640x1096.png">
<link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-750x1294.png">
<link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1182x2208.png">
<link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="/assets/apple-touch-startup-image-1242x2148.png">
<link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-748x1024.png">
<link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1496x2048.png">
<link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="/assets/apple-touch-startup-image-768x1004.png">
<link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="/assets/apple-touch-startup-image-1536x2008.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="228x228" href="/assets/coast-228x228.png">
<link rel="manifest" href="/assets/manifest.json">
<link rel="shortcut icon" href="/assets/favicon.ico">
<link rel="yandex-tableau-widget" href="/assets/yandex-browser-manifest.json">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title">
<meta name="application-name">
<meta name="mobile-web-app-capable" content="yes">
<meta name="msapplication-TileColor" content="#fff">
<meta name="msapplication-TileImage" content="/assets/mstile-144x144.png">
<meta name="msapplication-config" content="/assets/browserconfig.xml">
<meta name="theme-color" content="#fff">

Advanced Usage

plugins: [
  ViteFaviconsPlugin({
    /** Your source logo (Will default to ) */
    logo?: "assets/logo.png",
    /** Inject html links/metadata. */
    inject?: true,
    /** `Favicons` configuration options
    *  - [See `favicons` documentation](https://github.com/itgalaxy/favicons) */
    favicons?: FaviconsConfig,
    /** The root of the project from which you want to load metadata */
    projectRoot?: process.cwd(),

    /** prefix is delegated to Rollup/Vite (keeping for people migrating from Webpack)
    * @deprecated */
    prefix?: string,
    /** Caching is delegated to Rollup/Vite (keeping for people migrating from Webpack)
    * @deprecated */
    cache?: boolean,
    /** Public Path is delegated to Rollup/Vite (keeping for people migrating from Webpack)
    * @deprecated */
    publicPath?: string,
    /** Output Path is delegated to Rollup/Vite (keeping for people migrating from Webpack)
    * @deprecated */
    outputPath?: string,
  })
]

To fine tune what icons/metadata is generated, refer to favicons' documentation.

The options specified under favicons: are handed over as is to favicons, except that if appName, appDescription, version, developerName or developerURL are left undefined, they will be automatically inferred respectively from name, description, version, author.name and author.url as defined in the nearest package.json if available. And if there's no author it will use the first in the contributors. To disable automatically retrieving metadata from package.json, simply set to null the properties you want to omit.

Examples

Basic
const ViteFaviconsPlugin = require('vite-plugin-favicon')
// or ESM
import { ViteFaviconsPlugin } from "module";

plugins: [
  ViteFaviconsPlugin({
    logo: './src/logo.png', // svg works too!
    favicons: {
      appName: 'my-app',
      appDescription: 'My awesome App',
      developerName: 'Me',
      developerURL: null, // prevent retrieving from the nearest package.json
      background: '#ddd',
      theme_color: '#333',
      icons: {
        coast: false,
        yandex: false
      }
    }
  })
]

To fine tune what icons/metadata is generated, refer to favicons' documentation.

Handling Multiple HTML Files

Vite calls the HTML transform hook for each HTML file template file you have configured in Vite, so this works automatically.

Changelog

Take a look at the CHANGELOG.md.

Contribution

You're free to contribute to this project by submitting issues and/or pull requests.

Please keep in mind that every change and feature should be covered by tests.

License

This project is licensed under MIT.

Contributors

Keywords

FAQs

Package last updated on 17 Feb 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc