Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sirsayed98/simple-svg-sprite

A Webpack plugin that generates a SVG sprite
https://github.com/sirsayed98/simple-svg-sprite

images loaders optimization performance plugins sprite-map sprites svg svg-icons webpack

Last synced: 7 days ago
JSON representation

A Webpack plugin that generates a SVG sprite

Awesome Lists containing this project

README

        

# simple-svg-sprite

A Webpack plugin for creating an SVG sprite from individual SVG files.

## Table of Contents

- [Installation](#installation)
- [Usage](#usage)
- [Options](#options)
- [Change reference](#change-reference)
---

## Installation

Install `simple-svg-sprite` using npm or yarn as a dev dependency:

```console
npm install --save-dev simple-svg-sprite
```
OR
```console
yarn add --dev simple-svg-sprite
```
## Usage

Here's how to use the plugin in your Webpack configuration:
```console
// import package
const { SimpleSVGSprite, GenerateSVGContentHash } = require('simple-svg-sprite');
const svgContentHash = GenerateSVGContentHash('path/to/svgs/folder')

module.exports = {
// ... other webpack config
plugins: [
new SimpleSVGSprite({
svgFolderPath: 'path/to/svgs/folder',
spriteOutput: spritemap.${svgContentHash}.svg,
}),
]
};
```

## Options

| Option | Required | Description | Default
|--------|----------|-------------|---------
| `svgFolderPath` | **Yes** | The path to SVG images folder | -
| `spriteOutput` | **NO** | The output sprite name | `"spritemap.svg"`
| `prefix` | **NO** | Prefix to each symbol ID | `"shape-"`
| `svgoOptions` |**NO** | Custom optimization using SVGO library | `{}`

## Change reference
we need to convert reference from your code to sprite refrence
example:
```console
// your code

// to

```
- You don't need to update your code base to this format , you can use [Mutation observer](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) to do that `OR` use custom loader:

```console
// add this rule to your loaders
{
test: /\.(js|html)$/,
exclude: [/node_modules/],
use: {
loader: path.resolve(__dirname, './custom-loaders/EditSvgHrefLoader'),
options: {
svgFileName: `spritemap.${svgContentHash}.svg`,
prefix: 'shape-',
},
},
},

// create EditSvgHrefLoader.js file in custom-loaders folder
custom-loaders/EditSvgHrefLoader.js

const loaderUtils = require('loader-utils');
module.exports = function (source) {
const { svgFileName, prefix } = loaderUtils.getOptions(this);

const modifiedSource = source.replace(
new RegExp(`#${prefix}`, 'g'),
`${svgFileName}#${prefix}`
);

return modifiedSource;
};
```