vite-plugin-svg-sprite
Version:
SVG sprite plugin for Vite
94 lines (64 loc) • 2.49 kB
Markdown
> A Vite plugin for importing SVG files as SVG sprite symbols or components.
You can install the plugin using npm, pnpm, or yarn:
```bash
npm install vite-plugin-svg-sprite --save-dev
pnpm add vite-plugin-svg-sprite --save-dev
yarn add vite-plugin-svg-sprite --dev
```
To use the plugin, import and configure it in your Vite configuration file (`vite.config.js|ts`):
```javascript
import createSvgSpritePlugin from 'vite-plugin-svg-sprite';
const config = {
plugins: [
createSvgSpritePlugin({
exportType: 'vanilla', // or 'react' or 'vue'
include: '**/icons/*.svg'
}),
],
}
```
For React projects, set the `exportType` to `'react'` to import SVGs as components:
```javascript
import IconFoo from './icons/foo.svg';
<IconFoo />
```
This may seem similar to `svgr` but internally they are different.
`vite-plugin-svg-sprite` usually has a better render performance.
For Vue projects, set the `exportType` to `'vue'` to import SVGs as components:
```javascript
import IconFoo from './icons/foo.svg';
<IconFoo />
```
For users not using React or Vue, set the `exportType` to `'vanilla'`. The imported value will be the `symbolId`, which can be used with SVG `<use>`:
```javascript
import IconFoo from './icons/foo.svg';
const html = `
<svg>
<use href="#${IconFoo}" />
</svg>
`;
```
To get proper type hints in TypeScript, include the appropriate type definitions in your `tsconfig.json`:
```json
"types": [
// or "vite-plugin-svg-sprite/typings/react" | "vite-plugin-svg-sprite/typings/vue"
"vite-plugin-svg-sprite/typings/vanilla"
],
```
- **symbolId**: (`string`, optional) Controls the generated symbol ID. Default is `'icon-[name]'`.
- **exportType**: (`'vanilla' | 'react' | 'vue'`, optional) Determines the type of the exported value. Default is `'vanilla'`.
- If set to `'vanilla'`, the value will be the `symbolId`.
- If set to `'react'`, the value will be a React component.
- If set to `'vue'`, the value will be a Vue component.
- **svgo**: (object, optional) Configuration for SVGO, refer to the [SVGO documentation](https://github.com/svg/svgo) for details.
- **include**: (string | string[], optional) Paths to match SVG files that should be processed. Default is `'**/icons/*.svg'`, following [micromatch](https://github.com/micromatch/micromatch) rules.