0.8.0 • Published 4 months ago

unplugin-svg-component v0.8.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

unplugin-svg-component

English | 中文

NPM Version Downloads Stats

unplugin-svg-component inspired by vite-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 since v0.5.0.
  • SSR: Support SSR since v0.6.0.

Installation

yarn add unplugin-svg-component -D
# or
npm i unplugin-svg-component -D
# or
pnpm install unplugin-svg-component -D

Usage

// vite.config.ts
import { defineConfig } from 'vite'
import UnpluginSvgComponent from 'unplugin-svg-component/vite'

export default defineConfig({
  plugins: [
    UnpluginSvgComponent({ /* options */ }),
  ],
})

// vue.config.js
const { defineConfig } = require('@vue/cli-service')
const UnpluginSvgComponent = require('unplugin-svg-component/webpack').default

module.exports = defineConfig({
  configureWebpack: {
    plugins: [
      UnpluginSvgComponent({ /* options */ })
    ]
  }
})

// webpack.config.js
const UnpluginSvgComponent = require('unplugin-svg-component/webpack').default

module.exports = {
  /* ... */
  plugins: [
    UnpluginSvgComponent({ /* options */ }),
  ],
}

// rollup.config.js
import UnpluginSvgComponent from 'unplugin-svg-component/rollup'

export default {
  plugins: [
    UnpluginSvgComponent({ /* options */ }),
  ],
}

// esbuild.config.js
import { build } from 'esbuild'
import UnpluginSvgComponent from 'unplugin-svg-component/esbuild'

build({
  /* ... */
  plugins: [
    UnpluginSvgComponent({
      /* options */
    }),
  ],
})

Vue

// main.ts
import SvgIcon from '~virtual/svg-component'

app.component(SvgIcon.name, SvgIcon)

React

// App.tsx
import SvgIcon from '~virtual/svg-component'

function App() {
  return (
    <div className="logo">
      <SvgIcon name='icon-react'></SvgIcon>
    </div>
  )
}

Get svgNames / type SvgName

// all svg icon name
import { svgNames } from '~virtual/svg-component'

// type SvgName = "icon-icon-addUser" | "icon-icon-barCode"
import type { 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 optimize Options
svgSpriteDomIdstringsvg_spritedom__Customize the ID of the svgDom
vueVersion2 \| 3 \| autoautoVue version
treeShakingbooleanfalsewhether 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. The text 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 the component 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.

Typescript support

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

Best Practices

You can refer to examples 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-PRESENT Jevon617

0.8.0

4 months ago

0.7.6

8 months ago

0.7.5

8 months ago

0.7.4

11 months ago

0.7.3

12 months ago

0.7.2

1 year ago

0.4.5

1 year ago

0.7.1

1 year ago

0.4.4

1 year ago

0.4.6

1 year ago

0.5.0

1 year ago

0.7.0

1 year ago

0.5.2

1 year ago

0.4.3

1 year ago

0.6.0

1 year ago

0.5.1

1 year ago

0.4.2

1 year ago

0.4.1

1 year ago

0.3.0

2 years ago

0.2.2

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago