A Vite plugin that transforms SVG files into SolidJS components using the DOMParser. Why this one? It's 3x faster than any SVGO powered plugin. Check the React version for more info.
- 🚀 Fast transformation using DOMParser
- 🎯 TypeScript support
- 🔧 Configurable transformation options
- 🔥 Hot Module Replacement (HMR) support
- ⚡ Vitest powered tests
npm install -D vite-solid-svg
pnpm add -D vite-solid-svg
yarn add -D vite-solid-svg
deno add npm:vite-solid-svg
bun install vite-solid-svg
// vite.config.ts
import { defineConfig } from 'vite'
import solidSVG from 'vite-solid-svg'
export default defineConfig({
plugins: [
// other plugins
solidSVG({
// optional
})
]
})
While the default options work just fine, for your convenience the plugin allows you to set them all:
interface VitePluginSolidSvgOptions {
// esbuild transform options
esbuildOptions?: EsbuildTransformOPtions;
// filter options
include?: string | RegExp | (string | RegExp)[]
exclude?: string | RegExp | (string | RegExp)[]
}
esbuildOptions
: EsbuildTransformOptions esbuild will make sure the plugin will work seamless within the Vite ecosystem and provides some additional options;include
: filter option to include one or more RegExp for file IDs; the default value is["**/*.svg?solid"]
;exclude
: filter option to exclude one or more RegExp for file IDs.
Note - If you modify or add more include filters and you're using Typescript, you should also define new global modules.
To add typescript support, edit your src/vite-env.d.ts
(or any global types you have set in your app) as follows:
/// <reference types="vite/client" />
/// <reference types="vite-solid-svg" />
import Icon from './icon.svg?solid'
const app = () => {
return <div>
<Icon
class='my-icon'
width={24} height={24}
style={{ fill: "currentColor" }}
/>
</div>
}
Notes:
- All properties present in the markup of your SVG files will be used as default values;
- The
viewBox
andxmlns
properties are somewhat required in order for the SVG to be rendered properly; - The plugin will also resolve SVG files from the
/public
folder or any validviteConfig.publicDir
option.
- vite-plugin-svgr - For inspiration on the plugin architecture.
- vite-react-svg - For a React version.
vite-solid-svg is released under MIT License.