TL;DR
SVG Jar - это unplugin для работы с SVG, предлагающий генерацию спрайт-листов, поддержку различных бандлеров и фреймворков. Решает проблемы производительности и организации векторной графики в production-сборках.
Введение: контекст и актуальность
В современном фронтенде SVG остаются критически важным инструментом для реализации адаптивной векторной графики. Однако масштабирование проекта с десятками иконок приводит к проблемам:
- Рост bundle size при inline-вставке
- Сложности управления через
<img>с отдельными файлами - Проблемы кастомизации и accessibility
SVG Jar предлагает системное решение, эволюционировав из ember-svg-jar в универсальный инструмент.
Основная часть: архитектура и API
1. Генерация спрайт-листов
// vite.config.js
import svgJar from 'unplugin-svg-jar/vite'
export default defineConfig({
plugins: [
svgJar({
spriteLoader: {
outputPath: 'assets/sprites/'
}
})
]
})
Ключевые особенности:
- Автоматическая группировка по директориям
- Оптимизация через SVGO
- Генерация хэшированных имен для cache busting
2. Именованные спрайт-листы
// components/Icon.jsx
import icons from 'virtual:svg-jar?collection=ui';
export function Icon({ name }) {
return <svg dangerouslySetInnerHTML={{ __html: icons[name] }} />;
}
Преимущества:
- Ленивая загрузка групп иконок
- Tree-shaking ненужных коллекций
- TypeScript support с генерацией типов
3. Runtime-режимы
// Web Components пример
customElements.define('svg-icon', class extends HTMLElement {
connectedCallback() {
this.innerHTML = `<svg viewBox="0 0 24 24">${this.getAttribute('symbol')}</svg>`;
}
});
Поддерживаемые варианты:
- React/Vue/Solid компоненты
- Pure DOM API
- Web Components
Практическое применение: кейсы
Перформанс-оптимизация
Метрики до/after внедрения:
- Уменьшение TTI на 15-20% за счет спрайтов
- Сокращение количества HTTP-запросов
- Улучшение LCP для критической графики
DX улучшения
- Hot-reload при изменении SVG
- Валидация через ESLint plugin
- Генерация документации через AST-анализ
Заключение
SVG Jar решает системные проблемы работы с векторной графикой в production-среде. Планы развития включают:
- Поддержка RSC (React Server Components)
- Расширенная accessibility-валидация
- Интеграция с Figma API
Для проектов с >20 иконками внедрение дает немедленный эффект по метрикам производительности и улучшает developer experience.
Ссылки для углубленного изучения:
Источник: https://github.com/svg-jar/plugin