A tool to convert SVG files to JSX/TSX components with minimum effort.
For manual single file conversion check svg2jsx which powers svg-jsx-converter.
You can install this package directly from npm
:
npm install --save-dev svg-jsx-converter
# or if you prefer yarn:
yarn add -D svg-jsx-converter
First you should create a config file, you can do this by running:
npx sjc init
SJC will assume you use src/assets/icons
as your source directory and src/components/icons
as your output directory. If you want to change this, you can edit the config file.
After you've put your SVG files in the source directory, you can run:
npx sjc gen
This will generate a JSX/TSX file for each SVG file in the source directory. The generated files will be placed in the output directory.
It also generates some other files too:
-
index
will export all the generated components as a single object. -
icon.component
will export a component that can be used to render components by easily referring to their names. -
types
will exports types for icon components if theconfig.type
istsx
.
The source directory which contains *.svg files.
The destination directory in which generated files will be stored.
It can be either tsx
or jsx
. If jsx
is selected types.ts
will not be generated and the icon component will not include types.
The type used for the icon component. The default generated value is SVGFC
imported from types.ts
for every icon. The default behaviour can be achieved by setting config.fcType
to default
.
An array of imports which will be added to the top of every generated file. If you intend to use custom fcType
you should add the import for it here.
If set to true
the generated components will be wrapped in React.memo
.
If set to true
a component will be generated which can be used to render components with easily refering to their names.
If you want to contribute to this project, you can do so by creating a pull request but please make sure to open an issue first or work on an existing issue.