nuckty
EN
Все разделы →

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 или неоднозначность в непустой карте прерывает сборку. Неизвестные фрагменты заголовков могут сохраняться, поэтому дополнительно проверяйте ссылки готового сайта.

Типографика русского языка

Для русскоязычных сайтов есть расширение типографики — оно не даёт тире разрывать строку: ставит неразрывный пробел перед длинным тире и обычный — после. Всё это без ручной разметки; англоязычному сайту расширение не нужно.

Куда дальше