svg-sprite-loader vs svg-sprite vs svgstore vs gulp-svg-sprite
SVG Sprite Management Libraries Comparison
1 Year
svg-sprite-loadersvg-spritesvgstoregulp-svg-spriteSimilar Packages:
What's SVG Sprite Management Libraries?

SVG sprite management libraries provide tools for optimizing and managing SVG files by combining multiple SVG images into a single sprite file. This approach reduces the number of HTTP requests, improving load times and performance. These libraries offer various features, including automation, modularity, and integration with build systems, making them essential for modern web development where performance and efficiency are critical.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
svg-sprite-loader196,5952,027-1483 years agoMIT
svg-sprite146,2771,953213 kB54a year agoMIT
svgstore36,707186-73 years agoMIT
gulp-svg-sprite33,88065013.4 kB12 years agoMIT
Feature Comparison: svg-sprite-loader vs svg-sprite vs svgstore vs gulp-svg-sprite

Integration

  • svg-sprite-loader:

    Specifically built for Webpack, enabling SVG files to be imported as modules in JavaScript, which is ideal for modern front-end frameworks like React and Vue.

  • svg-sprite:

    Designed for standalone use, it can be integrated into any build system or workflow. It provides a command-line interface for generating sprites, making it versatile and easy to adopt.

  • svgstore:

    Focuses on inlining SVG sprites directly into HTML, making it easy to manage and use SVGs without additional HTTP requests, suitable for projects where performance is a priority.

  • gulp-svg-sprite:

    Integrates seamlessly with Gulp, allowing for easy automation of sprite generation as part of your build process. It supports various output formats and can be configured to suit different project needs.

Customization

  • svg-sprite-loader:

    Allows for configuration through Webpack, enabling customization of how SVGs are processed and included in your application, making it flexible for various use cases.

  • svg-sprite:

    Provides a range of configuration options to customize the sprite generation process, including output paths and file naming, but may require more manual setup compared to gulp-svg-sprite.

  • svgstore:

    Customization is limited to how SVGs are inlined in HTML, focusing on simplicity rather than extensive configuration options.

  • gulp-svg-sprite:

    Offers extensive customization options for sprite generation, including control over the output structure, CSS styles, and naming conventions, allowing for tailored solutions to fit specific project requirements.

Performance

  • svg-sprite-loader:

    Enhances performance by allowing SVGs to be bundled with JavaScript, reducing the number of requests and enabling better caching strategies when used with Webpack.

  • svg-sprite:

    Generates optimized SVG sprites that can significantly reduce the number of HTTP requests, improving overall site performance, especially for projects with many SVG assets.

  • svgstore:

    Inlines SVGs to minimize HTTP requests, which can lead to faster rendering times and improved performance, particularly for sites with many small SVG icons.

  • gulp-svg-sprite:

    Optimizes SVG files during the sprite generation process, reducing file sizes and improving load times. The Gulp ecosystem also allows for additional performance enhancements through plugins.

Ease of Use

  • svg-sprite-loader:

    Easy to use for developers already familiar with Webpack, allowing for quick integration and usage within modern JavaScript applications.

  • svg-sprite:

    Requires some command-line knowledge but provides clear documentation, making it accessible for developers who are comfortable with terminal commands.

  • svgstore:

    Very simple to use, especially for those who want to inline SVGs directly in HTML without complex setup, making it ideal for quick implementations.

  • gulp-svg-sprite:

    User-friendly for those familiar with Gulp, providing a straightforward API and documentation, making it easy to set up and use in existing projects.

Community and Support

  • svg-sprite-loader:

    Part of the Webpack ecosystem, benefiting from a large community and extensive resources available for troubleshooting and best practices.

  • svg-sprite:

    Has a dedicated user base and good documentation, but may not have as many community resources compared to Gulp-based solutions.

  • svgstore:

    While it has a smaller community, it is straightforward enough that users can easily find solutions to common issues.

  • gulp-svg-sprite:

    Backed by a strong Gulp community, with plenty of resources, plugins, and examples available for support, making it a reliable choice for Gulp users.

How to Choose: svg-sprite-loader vs svg-sprite vs svgstore vs gulp-svg-sprite
  • svg-sprite-loader:

    Opt for svg-sprite-loader if you are working with Webpack and want to import SVG files directly into your components, allowing for dynamic usage and better integration with modern JavaScript frameworks.

  • svg-sprite:

    Select svg-sprite for a standalone solution that provides a command-line interface and can be easily integrated into various build processes without being tied to a specific task runner.

  • svgstore:

    Use svgstore if you need a simple and effective way to inline SVG sprites directly into your HTML, enhancing performance by reducing HTTP requests while keeping your markup clean.

  • gulp-svg-sprite:

    Choose gulp-svg-sprite if you are already using Gulp as your build system and want a straightforward way to automate the creation of SVG sprites with customizable options for output formats and styles.

README for svg-sprite-loader

SVG sprite loader

NPM version Build status Documentation score Dependencies status Dev dependencies status NPM downloads

Webpack loader for creating SVG sprites.

:tada: 2.0 is out, please read the migration guide & overview.

:warning: For old v0.x versions see the README in the v0 branch.

Table of contents

Why it's cool

  • Minimum initial configuration. Most of the options are configured automatically.
  • Runtime for browser. Sprites are rendered and injected in pages automatically, you just refer to images via <svg><use xlink:href="#id"></use></svg>.
  • Isomorphic runtime for node/browser. Can render sprites on server or in browser manually.
  • Customizable. Write/extend runtime module to implement custom sprite behaviour. Write/extend runtime generator to produce your own runtime, e.g. React component configured with imported symbol.
  • External sprite file is generated for images imported from css/scss/sass/less/styl/html (SVG stacking technique).

Installation

npm install svg-sprite-loader -D
# via yarn
yarn add svg-sprite-loader -D

Configuration

// webpack 1
{
  test: /\.svg$/,
  loader: 'svg-sprite-loader',
  query: { ... }
}

// webpack 1 multiple loaders
{
  test: /\.svg$/,
  loaders: [
    `svg-sprite-loader?${JSON.stringify({ ... })}`,
    'svg-transform-loader',
    'svgo-loader'
  ]
}

// webpack >= 2
{
  test: /\.svg$/,
  loader: 'svg-sprite-loader',
  options: { ... }
}

// webpack >= 2 multiple loaders
{
  test: /\.svg$/,
  use: [
    { loader: 'svg-sprite-loader', options: { ... } },
    'svg-transform-loader',
    'svgo-loader'
  ]
}

symbolId (string | function(path, query), default [name])

How <symbol> id attribute should be named. All patterns from loader-utils#interpolateName are supported. Also can be a function which accepts 2 args - file path and query string and return symbol id:

{
  symbolId: filePath => path.basename(filePath)
}

symbolRegExp (default '')

Passed to the symbolId interpolator to support the [N] pattern in the loader-utils name interpolator

esModule (default true, autoconfigured)

Generated export format:

  • when true loader will produce export default ....
  • when false the result is module.exports = ....

By default depends on used webpack version: true for webpack >= 2, false otherwise.

Runtime configuration

When you require an image, loader transforms it to SVG <symbol>, adds it to the special sprite storage and returns class instance that represents symbol. It contains id, viewBox and content (id, viewBox and url in extract mode) fields and can later be used for referencing the sprite image, e.g:

import twitterLogo from './logos/twitter.svg';
// twitterLogo === SpriteSymbol<id: string, viewBox: string, content: string>
// Extract mode: SpriteSymbol<id: string, viewBox: string, url: string, toString: Function>

const rendered = `
<svg viewBox="${twitterLogo.viewBox}">
  <use xlink:href="#${twitterLogo.id}" />
</svg>`;

When browser event DOMContentLoaded is fired, sprite will be automatically rendered and injected in the document.body. If custom behaviour is needed (e.g. a different mounting target) default sprite module could be overridden via spriteModule option. Check example below.

spriteModule (autoconfigured)

Path to sprite module that will be compiled and executed at runtime. By default it depends on target webpack config option:

  • svg-sprite-loader/runtime/browser-sprite.build for 'web' target.
  • svg-sprite-loader/runtime/sprite.build for other targets.

If you need custom behavior, use this option to specify a path of your sprite implementation module. Path will be resolved relative to the current webpack build folder, e.g. utils/sprite.js placed in current project dir should be written as ./utils/sprite.

Example of sprite with custom mounting target (copypasted from browser-sprite):

import BrowserSprite from 'svg-baker-runtime/src/browser-sprite';
import domready from 'domready';

const sprite = new BrowserSprite();
domready(() => sprite.mount('#my-custom-mounting-target'));

export default sprite; // don't forget to export!

It's highly recommended to extend default sprite classes:

symbolModule (autoconfigured)

Same as spriteModule, but for sprite symbol. By default also depends on target webpack config option:

  • svg-baker-runtime/browser-symbol for 'web' target.
  • svg-baker-runtime/symbol for other targets.

runtimeGenerator (default generator)

Path to node.js script that generates client runtime. Use this option if you need to produce your own runtime, e.g. React component configured with imported symbol. Example.

runtimeCompat (default false, deprecated)

Should runtime be compatible with earlier v0.x loader versions. This option will be removed in the next major version release.

runtimeOptions

Arbitrary data passed to runtime generator. Reserved for future use when other runtime generators will be created.

Extract configuration

In the extract mode loader should be configured with plugin, otherwise an error is thrown. Example:

// webpack.config.js
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin');

...

{
  plugins: [
    new SpriteLoaderPlugin()
  ]
}

extract (default false, autoconfigured)

Switches loader to the extract mode. Enabled automatically for images imported from css/scss/sass/less/styl/html files.

spriteFilename (type string|Function<string>,default sprite.svg)

Filename of extracted sprite. Multiple sprites can be generated by specifying different loader rules restricted with include option or by providing custom function which recieves SVG file absolute path, e.g.:

{
  test: /\.svg$/,
  loader: 'svg-sprite-loader',
  options: {
    extract: true,
    spriteFilename: svgPath => `sprite${svgPath.substr(-4)}`
  }
}

[hash] in sprite filename will be replaced by it's content hash. It is also possible to generate sprite for each chunk by using [chunkname] pattern in spriteFilename option. This is experimental feature, use it with caution!

publicPath (type: string, default: __webpack_public_path__)

Custom public path for sprite file.

{
  test: /\.svg$/,
  loader: 'svg-sprite-loader',
  options: {
    extract: true,
    publicPath: '/'
  }
}

outputPath (type: string, default: null`)

Custom output path for sprite file. By default it will use publicPath. This param is useful if you want to store sprite is a directory with a custom http access.

{
  test: /\.svg$/,
  loader: 'svg-sprite-loader',
  options: {
    extract: true,
    outputPath: 'custom-dir/sprites/'
    publicPath: 'sprites/'
  }
}

Plain sprite

You can render plain sprite in extract mode without styles and usages. Pass plainSprite: true option to plugin constructor:

{
  plugins: [
    new SpriteLoaderPlugin({ plainSprite: true })
  ]
}

Sprite attributes

Sprite <svg> tag attributes can be specified via spriteAttrs plugin option:

{
  plugins: [
    new SpriteLoaderPlugin({
      plainSprite: true,
      spriteAttrs: {
        id: 'my-custom-sprite-id'
      }
    })
  ]
}

Examples

See examples folder.

Contributing guidelines

See CONTRIBUTING.md.

License

See LICENSE

Credits

Huge thanks for all this people.