Convert SVG icons into React components
npm i pixoPass a directory or SVG file path as the first argument.
$ pixo src --out-dir distEach SVG icon will be automatically optimized and renamed to a pascal case filename for the component. Icon components can then be imported into a React application.
import React from 'react'
import CheckIcon from './CheckIcon'
const App = props => (
<div>
<CheckIcon />
</div>
)The default component template includes props for:
size(number) pixel width and height (default24)color(string) color value passed to the SVGfillattribute (default'currentcolor')
Each SVG icon must conform to the following:
- Use a square
viewBoxattribute, preferably0 0 24 24 - Only use a single color (e.g. black)
- For best results, only use
<path>elements - Do not use transforms
Pixo includes experimental support for <circle>, <polygon>, and <rect> elements.
The following elements will be ignored:
- Elements within a
<defs>or<clipPath> - Elements with the
fill="none"attribute <ellipse>elements<line>elements<polyline>elements
Most graphics applications can convert shapes into SVG paths.
- Adobe Illustrator: use the
Compound Pathcommand - Figma: TK
- Sketch: TK
Pixo uses a default template for rendering, but includes some built-in options.
default: plain SVG with no stylingstyledSystem: styled-component with margin, padding, and color props from styled-system
To use a custom template, pass a path to your template to the --template flag.
pixo icons --template custom-template.jsA template should be a function that returns a string for the component source code, written as a Node.js module.
// default template
module.exports = ({
name,
viewBox,
pathData
}) => `import React from 'react'
const ${name}Icon = ({
size,
color,
...props
}) => (
<svg
{...props}
viewBox='${viewBox}'
width={size}
height={size}
fill={color}
>
<path d='${pathData}' />
</svg>
)
${name}Icon.displayName = '${name}Icon'
${name}Icon.defaultProps = {
size: 24,
color: 'currentcolor'
}
export default ${name}`Template function arguments
namecamel cased name that can be used for the component nameviewBoxthe original viewBox value from the SVGpathDataextracted path data for the<path>element'sdattribute
Options can be passed as flags to the CLI or added to a pixo field in your package.json
Run pixo --help to see the list of options.
outDir(string) output directory (default dist)template(string) name of built-in template or path to custom templateindex(boolean) create anindex.jsbarrel moduleiconComponent(boolean) create anIcon.jswrapper componentrecursive(boolean) recursively read all SVGs in subdirectories
CLI flags
-d --out-dir Output directory
-t --template Name of built-in template or path to custom template
-i --index Include index.js barrel module
-c --icon-component Include wrapper Icon.js component
-r --recursive Recursively read all SVGs in subdirectoriesExample package.json
{
"pixo": {
"outDir": "dist",
"template": "./custom-template.js",
"index": true,
"iconComponent": true,
"recursive": true
}
}- Microicon
- Building SVG Icons with React
- Reline
- React Icons
- Making SVG Icon Libraries for React Apps
- babel-plugin-inline-react-svg
- svg-react-loader
- react-svg-loader