nuckty
Все генераторы статических сайтов отвратительны. Этот — просто чуть менее отвратительный.
nuckty — генератор статических сайтов для документации и контентных проектов с программируемым конвейером сборки. Сборка создаёт каталог страниц и ассетов, заранее сжатые копии выбранных файлов и конфигурацию хостинга. Его можно опубликовать на совместимом сервере.
Почему nuckty
Карта сайта как явное дерево
Структура сайта описана в одном файле sitemap.yml: адреса, заголовки, метаданные страниц и навигация. Само добавление файла Markdown не публикует страницу через сборку ядра; перед релизом проверьте зарегистрированный контент. Адреса публикации отделены от путей исходников. Шаблоны используют эти данные при сборке.
Программируемый конвейер сборки
Конвейер сборки состоит из фиксированных фаз, именованных стадий и хуков before/after. Расширение добавляет стадии и хуки; замена встроенной стадии повторной регистрацией имени не поддерживается.
Расширения — единственный механизм
В ядре нет ни блоков, ни страниц: даже обёртку страницы даёт расширение. Расширения подключают всё через единую точку входа — блоки, команды, стадии сборки, конструкции markdown-разметки. Пользователь ставит ровно то, что ему нужно.
Один движок для контента и вёрстки
Markdown преобразуется в дерево BEMJSON. Тот же движок nu обрабатывает контент и блоки документа. Текущая стадия HTML сначала сериализует контент, затем передаёт его обработчику документа как узел raw.
Сжатие на этапе сборки
При сборке движок создаёт Brotli Q11 и Gzip 9 для выбранных непустых файлов. Копии находятся в brotli/ и gzip/. Сервер выбирает готовую копию по Accept-Encoding; сборка генерирует для этого конфигурацию nginx и Apache.
Выбор формата изображения по одному адресу
Для растрового изображения сборка копирует оригинал и доступные варианты AVIF/WebP, подготовленные отдельно. По одному логическому адресу сервер выбирает доступный формат с учётом Accept. Наличие обоих вариантов не является требованием сборки.
Минимальный HTML
Движок минимизирует HTML: опускает поддерживаемые необязательные закрывающие теги и допустимые кавычки, не добавляет служебных отступов. Переносы в тексте и raw сохраняются. Валидность документа зависит от шаблонов и исходного HTML; проверяйте конкретный артефакт.
Публикация по FTP через манифест
Команда nuckty deploy-ftp сравнивает локальный манифест (размеры и хэши файлов) с состоянием сервера и загружает только изменившиеся файлы. Этого достаточно для самого простого виртуального хостинга с FTP: без SSH, без rsync, без git на сервере.
Несколько сайтов в одном репозитории
Из одного репозитория можно собрать сразу несколько сайтов — например, языковые версии на разных доменах. Движок строит соответствующие маршруты на родственных доменах, не проверяя наличие страниц, и передаёт блоку данные для hreflang. Как именно оформить <link rel=alternate> — решает автор.
Разрешение ссылок
Автор пишет ссылки на .md-файлы; движок сопоставляет их с адресами карты сайта. Отсутствующая относительная цель .md или неоднозначность в непустой карте прерывает сборку. Неизвестные фрагменты заголовков могут сохраняться, поэтому дополнительно проверяйте ссылки готового сайта.
Типографика русского языка
Для русскоязычных сайтов есть расширение типографики — оно не даёт тире разрывать строку: ставит неразрывный пробел перед длинным тире и обычный — после. Всё это без ручной разметки; англоязычному сайту расширение не нужно.
Куда дальше
- С чего начать — установка и сборка первого сайта.
- Как пользоваться — модель данных, шаблоны, карта сайта, конвейер сборки.
- Что получается — результат сборки: HTML, ассеты, сжатие, хостинг.
- Расширения — каталог расширений экосистемы.
- Почему так — архитектурные решения и их обоснование.