# Webpunk Templates — Подробная документация по сборщику

## Быстрый старт

1. **Установите pnpm:**  
   [Инструкция по установке](https://pnpm.io/)

2. **Установите зависимости:**  
   ```bash
   pnpm install
   ```

3. **Запустите сборку или сервер разработки:**  
   - Сборка:  
     ```bash
     pnpm run build
     ```
   - Сервер разработки:  
     ```bash
     pnpm run dev
     ```

---

## Структура проекта

- `src/` — исходные файлы (шаблоны, стили, скрипты, изображения, данные)
- `dist/` — результат сборки (готовый к публикации код)
- `ssl/` — dev SSL-сертификаты (создаются автоматически)
- `.env.local` — локальная конфигурация сборщика

---

## Основные возможности сборщика

### 1. **Гибкая работа с шаблонами**

- Поддержка **Pug** и **Twig** (выбор через `.env.local` или команды)
- Инкрементальная сборка страниц: при изменении страницы пересобирается только она
- Автоматическая подгрузка данных из `src/data/*.json` для шаблонов
- В шаблонах доступны функции для генерации srcset и mime-типов изображений

### 2. **Стили и скрипты**

- SCSS компиляция с sourcemaps, autoprefixer, postcss-url (автоматическое добавление версий к ассетам)
- Минификация CSS (`style.min.css`)
- Сборка и минификация JS (разделение на common/vendor)
- Поддержка sourcemaps для JS

### 3. **Изображения**

- Оптимизация PNG, JPEG, SVG
- Генерация webp и avif-версий изображений
- Инкрементальная обработка (обрабатываются только новые/изменённые файлы)
- Генерация SVG-спрайта и автоматическая инъекция в HTML

### 4. **Автоматизация и наблюдение**

- Watch-режим для всех исходников (шаблоны, данные, стили, скрипты, изображения, иконки)
- При изменении страницы пересобирается только она, при изменении общих файлов — пересобираются все страницы
- Автоматическая перезагрузка браузера через BrowserSync

### 5. **HTTPS для разработки**

- Автоматическое создание самоподписанных SSL-сертификатов для локальной разработки
- Включение HTTPS через `.env.local` или специальные команды

### 6. **Конфигурация**

- Все параметры (шаблонизатор, порт, хост, HTTPS, автооткрытие браузера и др.) настраиваются в `.env.local`
- Быстрое создание и обновление конфигурации через команды

---

## Основные команды

| Команда                | Описание                                                                 |
|------------------------|--------------------------------------------------------------------------|
| `pnpm run dev`         | Запуск сервера разработки (шаблонизатор по умолчанию из `.env.local`)    |
| `pnpm run dev:pug`     | Запуск dev-сервера с Pug                                                 |
| `pnpm run dev:twig`    | Запуск dev-сервера с Twig                                                |
| `pnpm run dev:https`   | Dev-сервер с HTTPS                                                       |
| `pnpm run dev:pug:https` | Dev-сервер с Pug и HTTPS                                               |
| `pnpm run dev:twig:https` | Dev-сервер с Twig и HTTPS                                             |
| `pnpm run build`       | Сборка проекта (шаблонизатор по умолчанию)                               |
| `pnpm run build:pug`   | Сборка с Pug                                                             |
| `pnpm run build:twig`  | Сборка с Twig                                                            |
| `pnpm run ssl:create`  | Создать dev SSL-сертификаты                                              |
| `pnpm run ssl:check`   | Проверить наличие SSL-сертификатов                                       |
| `pnpm run ssl:info`    | Информация о сертификатах                                                |
| `pnpm run ssl:delete`  | Удалить dev SSL-сертификаты                                              |
| `pnpm run data:create` | Создать пример файла данных                                              |
| `pnpm run config:create` | Создать `.env.local` с настройками                                     |
| `pnpm run config:reload` | Перезагрузить конфиг без перезапуска сервера                           |
| `pnpm run clean`       | Очистить папку `dist`                                                    |
| `pnpm run pugprettier:fix` | Применить prettier к pug-файлам                                     |
| `pnpm run stylelint`   | Проверить SCSS на ошибки                                                 |
| `pnpm run stylelint:fix` | Исправить ошибки SCSS автоматически                                    |
| `pnpm run eslint`      | Проверить JS на ошибки                                                   |
| `pnpm run gh-pages`    | Залить содержимое `dist` на GitHub Pages                                |
| `pnpm run public`      | Сборка и публикация на GitHub Pages                                     |

---

## Как работает сборщик

1. **Конфигурация**  
   При запуске читается `.env.local`. Если файла нет — создаётся автоматически.  
   Можно выбрать шаблонизатор, порт, хост, включить HTTPS и др.

2. **Сборка**  
   - Очищается папка `dist`
   - Копируются ассеты (шрифты, изображения, фавиконки, robots.txt и др.)
   - Компилируются стили и скрипты (с минификацией и sourcemaps)
   - Оптимизируются изображения, генерируются webp/avif
   - Генерируется SVG-спрайт
   - Собираются HTML-файлы из шаблонов (Pug или Twig), подставляются данные из JSON
   - В HTML автоматически инъектируется SVG-спрайт

3. **Dev-сервер**  
   - Запускается BrowserSync на выбранном порту/хосте
   - При изменении страницы пересобирается только она (инкрементальная сборка)
   - При изменении общих файлов (layout, mixins, data) пересобираются все страницы
   - При изменении ассетов, стилей, скриптов — пересобираются только они
   - Браузер автоматически перезагружается

4. **HTTPS**  
   - При первом запуске с HTTPS создаются dev-сертификаты (openssl обязателен)
   - Сервер работает по https://

---

## Примеры использования

- **Сменить шаблонизатор:**  
  В `.env.local` изменить `TEMPLATE_ENGINE=pug` или `TEMPLATE_ENGINE=twig`, либо использовать команды `dev:pug`, `dev:twig`, `build:pug`, `build:twig`.

- **Включить HTTPS:**  
  В `.env.local` поставить `HTTPS=true` или использовать команду `dev:https`.

- **Добавить новые данные:**  
  Добавьте JSON-файл в `src/data/`, он автоматически попадёт в шаблоны.

---

## Советы

- Для корректной работы HTTPS нужен установленный openssl.
- Для публикации на GitHub Pages используйте `pnpm run public`.
- Для быстрой генерации структуры данных используйте `pnpm run data:create`.
- Для обновления конфигурации без перезапуска сервера — `pnpm run config:reload`.

---

## Каталоги

- Исходники: `src/`
- Сборка: `dist/`
- Конфиг: `.env.local`
- Сертификаты: `ssl/`
