1.0.9 • Published 3 years ago

simple-svg-sprite-loader v1.0.9

Weekly downloads
15
License
MIT
Repository
github
Last release
3 years ago

simple-svg-sprite-loader

Coverage Status

Install

Install with npm

npm install --save-dev simple-svg-sprite-loader

simple-svg-sprite-loader on npmjs.org

Introduction

A very simple webpack loader for SVGs that will automatically generate and inject all SVGs as a sprite into the DOM. It is intentionally kept simple with a very narrow use case:

A library wants to ship SVG icons in tree-shaking-enabled way.

It could also work for applications directly.

Usage

Library Side

File structure:

- icons
  - my-icon.svg
  - my-icon.js
  - fish.svg
  - fish.js
- icons.js // barrel file as your public interface

icons/my-icon.js

export const myIcon = require('!simple-svg-sprite-loader!./my-icon.svg');

icons/icons.js

export { myIcon } from './icons/my-icon';
export { fish } from './icons/fish';

Hint: both of these files could be easily generated by a build script.

Client side

import { fish } from 'your-library/icons';

console.log(fish.id, fish.name, fish.svg); // > "sssl-fish" "fish" "<svg id=\"fish\" [...]"

const svg = document.createElement('svg');
svg.innerHTML = `<use xlink:href="#${fish.id}"></use>`;
document.body.appendChild(svg);

You should use the icons id attribute as it gets prefixed at build time to avoid collisions with user defined ids.

Configuration

none.

Compatibility

Only Browsers are supported.

  • Firefox (reasonably recent)
  • Chrome (reasonably recent)
  • Internet Explorer (IE 11)
  • Safari (untested, should work though)

Tested with Webpack 4.41.x

Sprite Rendering

The sprite gets appended to document.body on document ready (using domready).

It will add something like this:

<div>
    <svg height="0" width="0" style="position: absolute;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <defs>
            <svg id="sssl-fish" xmlns="http://www.w3.org/2000/svg" viewBox="[icon's viewbox]">...</svg>
            <svg id="sssl-my-icon" xmlns="http://www.w3.org/2000/svg" viewBox="[icon's viewbox]">...</svg>
        </defs>
    </svg>
</div>

If your application lazily loads more icons, the injector will append them to the existing sprite (batched).

1.0.9

3 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago