svgid-loader

1.0.12 • Public • Published

svgid-loader

Simple loader to add an id attribute to your svgs.

Can be applied to SVGs when you want to import SVGs through <use> tags (e.g. with nextjs).

And could / should be combined with SVGO loader to achieve SVGR-like flexibility.

Install

  • yarn add svgid-loader -D
  • npm i svgid-loader -D

Configuration and recommended defaults

{
  // value for the id attribute
  id?: string,          // default = 'root'

  // set false to not overwrite existing id
  overwrite?: boolean   // default = false

  // set a custom selector to match the container element (e.g. `symbol`)
  selector?: string     // default = 'svg'
}

Usage

{
  test: /\.svg$/i,
    use: [
      {
        loader: 'svgid-loader',

        // provide options if you don't like the defaults
        options: {
          id: 'root',        // default value
          overwrite: false,  // default value
          selector: 'svg'    // default value
        },
      },
    ],
}

Usage with nextjs 11

Add loader to nextjs.config.js

module.exports = {
  webpack(config, options) {
    // ...

    // 'push' it into rules to ensure svgs are being 
    // processed before `next-image-loader`

    config.module.rules.push({
    test: /\.svg$/i,
    use: [{
            loader: 'svgid-loader',
            options: {
                id: 'root',
                overwrite: true,
            },
        },
        {
            loader: 'svgo-loader',
            options: {
                multipass: true,
                plugins: require('svgo').extendDefaultPlugins([('convertStyleToAttrs', 'removeStyleElement')]),
            },
        },
      ],
    });
  }
  // ...
}

Create Svg component

// File components/Svg.tsx

export const Svg = ({ data, ...rest }: { data: StaticImageData } & React.SVGProps<SVGSVGElement>) => {
	return (
		<svg
			viewBox={`0 0 ${data.width} ${data.height}`}
			{...rest}
		>
			<use href={`${data.src}#root`} />
		</svg>
	);
};

Use Svg component

  // File components/HereWeUseSvgs.tsx

  import AuthSvg from '@fortawesome/fontawesome-pro/svgs/duotone/user-unlock.svg';
  import { Svg } from './Svg';
  // ...

  return <Svg data={AuthSvg} />

Readme

Keywords

none

Package Sidebar

Install

npm i svgid-loader

Weekly Downloads

16

Version

1.0.12

License

ISC

Unpacked Size

5.04 kB

Total Files

7

Last publish

Collaborators

  • passionkind