npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

vite-plugin-svg-sprite-generator

v1.1.1

Published

A fast, zero-dependency SVG sprite generator for Vite 5–8+ and Node.js >= 18.5. Supports single/folders modes, watch reloading, and smart attribute inheritance.

Readme

vite-plugin-svg-sprite-generator

🌐 English | 🇷🇺 Русский

Современный, производительный и абсолютно независимый от сторонних библиотек (Zero Dependencies) плагин для генерации SVG-спрайтов в Vite 5, 6, 7 и 8+.

Плагин использует нативные возможности Node.js для рекурсивного обхода директорий, что гарантирует максимальную скорость работы, минимальный размер пакета и отсутствие уязвимостей в цепочке зависимостей.

🚀 Особенности

  • Zero Dependencies — не тянет за собой мегабайты из node_modules (не использует fast-glob, cheerio или svgo). Работает исключительно на нативном API Node.js.
  • Два режима сборки — объединение всех иконок в один файл или автоматическое разделение на отдельные спрайты на основе структуры папок.
  • Поддержка Черновиков — файлы, начинающиеся с _, автоматически игнорируются.
  • Умное управление атрибутами — гибкий перенос атрибутов из тега <svg> в тег <symbol> с возможностью локального форсирования через префикс !.
  • Режим автоматического обновления (Watch) — мгновенно пересобирает спрайты при добавлении, изменении или удалении файлов во время разработки.
  • Безопасная очистка — умный алгоритм clean удаляет только файлы текущей сборки, полностью исключая случайное удаление пользовательских SVG (например, logo.svg или favicon.svg).

📦 Установка

Для стабильной работы плагина необходима версия Node.js >= 18.5.0 (в ней появился нативный рекурсивный обход папок) и Vite >= 5.0.0.

npm install vite-plugin-svg-sprite-generator --save-dev
# или
pnpm add -D vite-plugin-svg-sprite-generator
# или
yarn add -D vite-plugin-svg-sprite-generator

🛠 Использование

Добавьте плагин в ваш конфигурационный файл vite.config.js:

import { defineConfig } from "vite";
import svgSprite from "vite-plugin-svg-sprite-generator";

export default defineConfig({
  plugins: [
    svgSprite({
      input: "src/icons",
      output: "dist/assets",
      mode: "single",
      clean: true,
    }),
  ],
});

⚙️ Параметры конфигурации (API)

Все параметры являются необязательными.

| Параметр | Тип | По умолчанию | Описание | | ----------------- | --------- | --------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | input | string | 'src/icons' | Путь к папке с исходными SVG-файлами (сканируется рекурсивно). | | output | string | 'dist/assets' | Путь к директории, куда будут сохранены сгенерированные спрайты. | | name | string | 'sprite.svg' | Базовое имя файла спрайта. Расширение .svg можно не указывать. | | mode | 'single' | 'folders' | 'single' | Режим группировки иконок (один общий файл или разделение по папкам). | | clean | boolean | true | Очищать старые сгенерированные спрайты перед новой сборкой. | | inheritSvgAttrs | boolean | true | Переносить ли атрибуты оригинального <svg> (кроме xmlns и id) в <symbol>. |


📂 Режимы работы (mode)

Режим single

Все SVG-файлы из папки input (включая все подпапки) собираются в один глобальный файл спрайта.

  • Имя на выходе: sprite.svg (или значение из параметра name).

Режим folders

Плагин группирует иконки по первой подпапке относительно пути input.

Если ваша структура выглядит так:

src/icons/
├── editor/
│   ├── plus.svg
│   └── minus.svg
├── code/
│   ├── js.svg
│   └── ts.svg
└── flags/
    └── us.svg

На выходе в папке output сгенерируются файлы:

  • sprite-editor.svg (содержит иконки plus и minus)
  • sprite-code.svg (содержит иконки js и ts)
  • sprite-flags.svg (содержит иконку us)

Примечание: Если задать name: "", то префикс sprite- опускается, и файлы будут именоваться точно по названию папок: editor.svg, code.svg, flags.svg. Вложенность глубже первого уровня (например, editor/ui/add.svg) всё равно попадет в спрайт первого уровня (sprite-editor.svg).


🌟 Продвинутые возможности

Скрытые SVG (Черновики)

Если вам нужно сохранить рабочие исходники или черновики иконок в папке проекта, просто добавьте символ подчеркивания _ в начало имени файла. Плагин полностью проигнорирует их при сборке:

  • _plus-old.svgигнорируется
  • minus.jsигнорируется (плагин работает только с .svg)

Наследование атрибутов и локальное переопределение

По умолчанию (inheritSvgAttrs: true) все презентационные атрибуты оригинального тега <svg> (такие как viewBox, fill, stroke, stroke-width) переносятся на тег <symbol>. Атрибуты xmlns и id всегда исключаются автоматически.

Если выставить inheritSvgAttrs: false, атрибуты не наследуются, сохраняется только viewBox (если он был задан изначально).

🔥 Локальный Override (Префикс !)

Если имя файла начинается со знака !, плагин принудительно перенесет все атрибуты для этой конкретной иконки, независимо от глобального значения inheritSvgAttrs.

После генерации префикс ! автоматически удаляется из финального id символа:

  • Файл: !google.svg<symbol id="google" viewBox="..." fill="...">

🪵 Логирование и обработка ошибок

Плагин спроектирован так, чтобы никогда не прерывать процесс сборки (Vite Build) из-за отсутствующих файлов или пустых директорий. Вместо падения он выводит аккуратные предупреждения (Warnings).

При успешной генерации каждого файла в консоль Vite выводится подробная информация:

[vite-plugin-svg-sprite-generator]

Создан:
sprite-editor.svg
(15 icons)