Files
svg-sprites/docs/ru/guides/angular-webpack.md
S.Gromov 8b3365f957 feat: добавить поддержку 20 framework exact modes
Добавлены exact modes:
- vue@vite и vue@webpack
- nuxt@vite и nuxt@webpack
- svelte@vite, svelte@webpack и sveltekit@vite
- angular@application и angular@webpack
- astro@vite
- solid@vite, solid@webpack и solid-start@vite
- preact@vite и preact@webpack
- qwik@vite
- lit@vite и lit@webpack
- alpine@vite и alpine@webpack

Для каждого mode реализованы изолированный adapter, нативный
framework-компонент, declarations, manifest, CSS и внешний asset URL.

Добавлены production integration-стенды с генерацией, typecheck,
сборкой и Playwright-проверкой рендера спрайта и Viewer.

Обновлены Viewer, RU/EN-гайды, README, technical reference и AI skills.
Итоговая матрица включает 29 exact modes.

Проверки:
- 48 unit-тестов
- 29 integration E2E-тестов
2026-07-15 16:56:44 +03:00

94 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SVG-спрайт для Angular на Webpack
Инструкция по быстрому созданию SVG-спрайта в Angular-приложении со штатным Webpack browser builder из Angular CLI.
## Генерация спрайта
Выберите каталог для будущего SVG-спрайта, например `assets/app-icons`, и создайте в нём `svg-sprite.config.json`. В `input` укажите путь к существующим SVG относительно файла конфигурации. Перемещать или копировать иконки не требуется.
```json
{
"mode": "angular@webpack",
"name": "app",
"input": "../svg-icons/**/*.svg"
}
```
Mode предназначен для workspace, где build target использует официальный Webpack builder:
```json
{
"builder": "@angular-devkit/build-angular:browser"
}
```
Пакет не нужно добавлять в зависимости проекта. Генерируйте спрайт через `npx` перед каждым запуском и сборкой:
```json
{
"scripts": {
"sprites": "npx --yes @gromlab/svg-sprites assets/app-icons/svg-sprite.config.json",
"prestart": "npm run sprites",
"start": "ng serve",
"prebuild": "npm run sprites",
"build": "ng build"
}
}
```
Webpack разрешает generated-выражение `new URL(..., import.meta.url)` и выпускает `sprite.svg` как production asset.
## Использование спрайта
Создайте `assets/app-icons/index.ts`:
```ts
export * from './.svg-sprite/index'
```
Импортируйте сгенерированный standalone-компонент. Значение `name: "app"` создаёт `AppIcon` с селектором `app-icon`:
```ts
import { Component } from '@angular/core'
import { AppIcon } from '../assets/app-icons'
@Component({
selector: 'app-root',
standalone: true,
imports: [AppIcon],
template: `
<app-icon
icon="icon-name"
role="img"
aria-label="Готово"
style="width: 24px; height: 24px; color: #334155; --icon-color-2: #f59e0b"
/>
`,
})
export class AppComponent {}
```
Input `icon` типизирован именами исходных файлов. Монохромные иконки наследуют `color`, отдельные цвета задаются через `--icon-color-N`.
## Дебаг и превью
Viewer необязателен и нужен только при разработке:
```bash
npm install --save-dev @gromlab/svg-sprites
```
Импортируйте `@gromlab/svg-sprites/viewer/element`, добавьте `CUSTOM_ELEMENTS_SCHEMA` и поместите `<gromlab-sprite-viewer [sources]="viewerSources" />` в шаблон:
```ts
readonly viewerSources = [async () => {
const { default: manifest } = await import(
'../assets/app-icons/.svg-sprite/svg-sprite.manifest.js'
)
const { usage: _usage, ...viewerManifest } = manifest
return viewerManifest
}]
```
Viewer и `AppIcon` используют один выпущенный Webpack URL спрайта.