Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

generate a vue/react component through svg files, supporting svg file HMR, Tree-shaking, SSR and TS hint.

License

NotificationsYou must be signed in to change notification settings

Jevon617/unplugin-svg-component

Repository files navigation

English |中文

NPM VersionDownloads Stats

unplugin-svg-component inspired byvite-plugin-svg-icons, it will generate a Vue/React component through SVG files, use the SVG icon through the component.

IDE Intelligent

Vue

image

React

image

Features

  • intelligent: When using components, the name of the SVG file will be prompted with Typescript
  • HMR: HMR for svg file
  • Vue & React: Support Vue&React and automatically detect project types.
  • Tree-shaking: Only bundle the icons you really use sincev0.5.0.
  • SSR: Support SSR by enabling theoption.domInsertionStrategy = replaceHtml(default) sincev0.6.0.

Installation

yarn add unplugin-svg-component -D# ornpm i unplugin-svg-component -D# orpnpm install unplugin-svg-component -D

Usage

Vite config
// vite.config.tsimport{defineConfig}from'vite'importUnpluginSvgComponentfrom'unplugin-svg-component/vite'exportdefaultdefineConfig({plugins:[UnpluginSvgComponent({/* options */}),],})


Vue-cli config
// vue.config.jsconst{ defineConfig}=require('@vue/cli-service')constUnpluginSvgComponent=require('unplugin-svg-component/webpack').defaultmodule.exports=defineConfig({configureWebpack:{plugins:[UnpluginSvgComponent({/* options */})]}})


Webpack config
// webpack.config.jsconstUnpluginSvgComponent=require('unplugin-svg-component/webpack').defaultmodule.exports={/* ... */plugins:[UnpluginSvgComponent({/* options */}),],}


Rollup config
// rollup.config.jsimportUnpluginSvgComponentfrom'unplugin-svg-component/rollup'exportdefault{plugins:[UnpluginSvgComponent({/* options */}),],}


Esbuild config
// esbuild.config.jsimport{build}from'esbuild'importUnpluginSvgComponentfrom'unplugin-svg-component/esbuild'build({/* ... */plugins:[UnpluginSvgComponent({/* options */}),],})


Vue

// main.tsimportSvgIconfrom'~virtual/svg-component'app.component(SvgIcon.name,SvgIcon)

React

// App.tsximportSvgIconfrom'~virtual/svg-component'functionApp(){return(<divclassName="logo"><SvgIconname="icon-react"></SvgIcon></div>)}

GetsvgNames / typeSvgName

// all svg icon nameimport{svgNames}from'~virtual/svg-component'// type SvgName = "icon-icon-addUser" | "icon-icon-barCode"importtype{SvgName}from'~virtual/svg-component'

Plugin Configuration

ParameterTypeDefaultDescription
iconDirstring | string[]-the icon folder of the Sprite image
projectTypevue | react | autoautothe project type, detect automatically
dtsboolean-whether generate d.ts file
dtsDirstring-d.ts location
prefixstring-symbolId prefix
componentNamestringSvgIconthe name of component
componentStylestringwidth: 1em; height: 1em; fill:currentColor;the style of component
preserveColorRegExp-usually, the plugin will set SVG's fill and stroke with 'currentColor', this option will perform regular matching on each SVG path, the successfully matched SVG will not do the replacement, but retain the original color.
symbolIdFormatter(svgName:string, prefix: string)=>stringlook this waythe symbolId's formatter
optimizeOptionsSvgoOptions-svgo optimizeOptions
svgSpriteDomIdstringsvg_sprite__domCustomize the ID of the svgDom
vueVersion2 | 3 | autoautoVue version
treeShakingbooleantruewhether enable tree-shaking
scanGlobstring[]look this waythe glob pattern used in tree-shaking
scanStrategytext | component | (code: string[], options: Options)=>string[]componentthe strategy used for tree-shaking will not be bundled into the final bundle if it is not successfully matched. Thetext option indicates matching by svg name, so you should ensure the uniqueness of your svg name (you can consider customizing it with the 'symbolIdFormatter' option) to avoid erroneous tree-shaking, while the default value of thecomponent option indicates matching by component as a whole, In addition, you can also implement a tree-shaking strategy by passing a function whose return value represents the set of SVG icons used.
domInsertionStrategyreplaceHtml | dynamicreplaceHtmlcontrols the method of injecting SVG elements,replaceHtml(default): Injects the SVG elements by replacing the HTML string in server.dynamic: Injects the SVG elements through JavaScript dynamically in client.Warning: if you are in ssr mode, you should usereplaceHtml strategy.

Typescript support

// tsconfig.json{"include": ["svg-component.d.ts","svg-component-global.d.ts"]}

Best Practices

You can refer toexamples as required. Note that the configuration in examples is the default configuration.

Contributing

  1. Fork it (https://github.com/Jevon617/unplugin-svg-component/fork)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -am 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Create a new Pull Request

License

MIT License © 2022-PRESENTJevon617

About

generate a vue/react component through svg files, supporting svg file HMR, Tree-shaking, SSR and TS hint.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors3

  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp