@proscom/gulp-svgr
This is a gulp plugin which
allows you to run svgr as a gulp task.
In current state this plugin is not generally intended for the general use
as it relies on the couple of use-case specific assumptions.
Installation
npm install --save-dev @proscom/gulp-svgr
# or
yarn add --dev @proscom/gulp-svgr
Usage
In your gulpfile.js
add this module as one of the transforms
applied to your files:
const gulpSvgr = require('@proscom/gulp-svgr');
function buildIcons() {
return src('src/assets/icons/**/*.svg')
.pipe(
gulpSvgr({
svgr: {
icon: true,
plugins: ['@svgr/plugin-jsx', '@svgr/plugin-prettier']
},
aggregate: ['size'],
aggregateDefault: (name, icons) => icons[icons.length - 1],
createIndex: true,
createIndex: 'index.ts',
extension: 'js',
prefix: 'MyIcon'
})
)
.pipe(dest('src/icons'));
}
module.exports.buildIcons = buildIcons;
Aggregating icons
This plugin is capable of aggregating icons together.
This is useful in cases when the icon has some variability, e.g.:
/back/small.svg
/back/medium.svg
/back/large.svg
Then this plugin will aggregate all these icons together, so you can
dynamically choose the right variant:
import { IconBack } from './icons';
function MyComponent() {
return <IconBack size="small" />;
}
Otherwise, you would have to import icons separately:
import { IconBackSmall, IconBackMedium, IconBackLarge } from './icons';
function MyComponent() {
return <IconBackSmall />;
}
To aggregate icons, pass aggregate
prop.
It should be a one-item array
containing the name of the aggregation dimension.
It will also be used as the prop of the resulting component
which determines which icon to use.