Files
svg-sprites/docs/ru/guides/alpine-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

104 lines
3.4 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-спрайт для Alpine.js на Webpack 5
Инструкция по быстрому созданию SVG-спрайта в Alpine.js-приложении на Webpack 5.
## Генерация спрайта
Выберите каталог для будущего SVG-спрайта, например `assets/app-icons`, и создайте в нём `svg-sprite.config.json`. В `input` укажите путь к существующим SVG относительно файла конфигурации. Перемещать или копировать иконки не требуется.
```json
{
"mode": "alpine@webpack",
"name": "app",
"input": "../svg-icons/**/*.svg"
}
```
Генератор не нужно добавлять в зависимости приложения: запускайте его через `npx`.
Добавьте генерацию перед запуском разработки и production-сборкой:
```json
{
"scripts": {
"sprites": "npx --yes @gromlab/svg-sprites assets/app-icons/svg-sprite.config.json",
"predev": "npm run sprites",
"dev": "webpack serve --mode development",
"prebuild": "npm run sprites",
"build": "webpack --mode production"
}
}
```
## Использование спрайта
Значение `name: "app"` создаёт Alpine plugin `appAlpinePlugin`, директиву `x-app-icon` и magic `$appIconHref`.
Generated CSS Alpine импортируется с query `?inline`. Добавьте правило Asset Modules в `webpack.config.js`:
```js
export default {
module: {
rules: [
{
test: /\.css$/,
resourceQuery: /inline/,
type: 'asset/source',
},
],
},
}
```
Создайте `assets/app-icons/index.js`:
```js
export * from './.svg-sprite/index.js'
```
Зарегистрируйте generated plugin до запуска Alpine:
```js
import Alpine from 'alpinejs'
import { appAlpinePlugin } from '../assets/app-icons/index.js'
Alpine.plugin(appAlpinePlugin)
Alpine.start()
```
Используйте реактивную директиву на SVG-элементе:
```html
<svg
x-data="{ iconName: 'icon-name' }"
x-app-icon="iconName"
role="img"
aria-label="Готово"
style="width:24px;height:24px;color:#334155;--icon-color-2:#f59e0b"
></svg>
```
Выражение директивы возвращает имя исходного SVG без расширения. Монохромная иконка наследует `color`, а слои многоцветной иконки переопределяются через `--icon-color-N`. Webpack 5 выпускает `sprite.svg` отдельным production asset.
## Дебаг и превью
Viewer показывает все иконки на одной странице и нужен только при разработке. Установите его отдельно:
```bash
npm install --save-dev @gromlab/svg-sprites
```
Добавьте Viewer в development entry:
```js
import '@gromlab/svg-sprites/viewer/element'
import spriteManifest from '../assets/app-icons/.svg-sprite/svg-sprite.manifest.js'
const viewer = document.createElement('gromlab-sprite-viewer')
viewer.viewerTitle = 'Иконки проекта'
viewer.sources = [spriteManifest]
document.body.append(viewer)
```
Подключайте этот entry только при разработке. Viewer не зависит от Alpine plugin.