Генераторы статических сайтов и Markdown

Зачем:Вы напишете страницы в Markdown с front matter, увидите, как генератор превращает их и шаблон в обычный HTML, и сможете выбрать между Jekyll, Hugo, Eleventy, Astro и SvelteKit по задаче. Это эпоха 5 (2019) вашего сайта: страницы по разделам, коллекция из ваших услуг и один общий шаблон.

25 минут

Озвучено синтезом речи (Qwen3-TTS), голос не принадлежит человеку.

Генератор статических сайтов — программа, которая при сборке превращает файлы Markdown, данные и общий шаблон в готовые HTML-файлы; на сервер кладут только их.

Другой путь: сайт как результат сборки

В предыдущих уроках страница собиралась при каждом запросе: сервер брал содержание из базы и вставлял в шаблон. Есть другой путь, знакомый вам по части 6 как «статика»: страницы собирают один раз заранее, а на сервер кладут готовые файлы. Программа, которая это делает, называется генератором статических сайтов. Когда в 2010-х сайты начали взламывать, замедлять и дорого обслуживать, этот подход вернулся, потому что у такого сайта нет базы, кода на сервере и, значит, почти нечего ломать.

Markdown: текст без HTML

Чтобы писать страницы, не набирая теги, придумали Markdown (Джон Грубер, 2004). Это несколько знаков, которые читаются глазами и превращаются в HTML:

# Заголовок первого уровня
## Заголовок второго уровня

Обычный абзац с **жирным** словом и [ссылкой](https://example.ru).

- пункт списка
- ещё пункт

Правила Грубера были описаны примерами, и разные программы понимали их по-разному. Поэтому позже появился строгий общий вариант, CommonMark. Файл Markdown это обычный текст: его откроет любой редактор, он хранится в Git, а его содержание не привязано к оформлению. Если завтра вы смените шаблон, тексты не пострадают.

Front matter: паспорт страницы

Над текстом страницы ставят небольшой блок настроек между строками из трёх дефисов. Он называется front matter:

---
title: Каталог
description: Что мы делаем и сколько это стоит
---
# Каталог

Это «паспорт» страницы: заголовок, описание для поисковика, дата, любые ваши поля. Шаблон берёт их оттуда (page.title), а коллекции по ним сортируются. Такой приём придумал Jekyll, и теперь он есть почти везде.

Что делает генератор

Подвигайте схему ниже. Слева Markdown со своим front matter, справа готовая страница. Услуги выводятся циклом по данным.

Как страница собирается из Markdown, данных и шаблона

Это учебный генератор, а не Jekyll или Hugo: он делает то же самое в миниатюре. Правьте Markdown слева, и страница пересобирается. Услуги берутся из вашего брифа, цены придуманы.

Готовая страница
Показать HTML, который получился
<!doctype html>
<html lang="ru">
<head><meta charset="utf-8"><title>Каталог | Мой сайт</title></head>
<body>
<header><strong>Мой сайт</strong>
<nav><a href="index.html">Главная</a> <a href="catalog.html">Каталог</a> </nav></header>
<main><h1>Каталог</h1>
<p>Все услуги выводятся из данных, а не набраны руками:</p>
<ul>
<li><strong>Первая услуга</strong>, от 3000 ₽</li>
<li><strong>Вторая услуга</strong>, от 5000 ₽</li>
<li><strong>Третья услуга</strong>, по смете</li>
</ul></main>
<footer>Мой сайт, все права защищены</footer>
</body>
</html>
Тот же цикл в разных инструментах
{% for item in site.items %}
  <li>{{ item.title }}</li>
{% endfor %}

Текстовая альтернатива: файл Markdown с front matter (заголовок и описание), данные (услуги) и общий шаблон проходят через генератор и превращаются в готовый HTML-файл. Меняя Markdown или шаблон, вы сразу видите новую страницу. В Jekyll, Eleventy, Hugo, Astro и SvelteKit цикл по данным пишется по-разному, но делает одно и то же.

Работа генератора укладывается в пять шагов: прочитать файлы и данные; разобрать front matter; подставить данные в текст и превратить Markdown в HTML; вставить результат в общий шаблон; записать готовые файлы в папку. Эта работа называется сборкой (build) и идёт у вас на компьютере или на сервере сборки. Результат это обычная папка с HTML, CSS и картинками, которую можно положить куда угодно.

Три понятия, которые встречаются в любом генераторе:

  • Шаблон (layout) задаёт общую рамку: шапка, меню, подвал. Он один, и телефон в шапке правится в одном месте.
  • Данные и коллекции: набор однотипных записей (все услуги, все статьи). Шаблон проходит по ним циклом и выводит список. Новая услуга это новый файл, а не правка страницы.
  • Фильтры и вставки: небольшие функции в шаблоне (экранирование, форматирование даты) и повторно используемые куски разметки.
Проверьте себя: где лежит телефон в шапке и сколько файлов править, чтобы его поменять?

В общем шаблоне, один файл. После пересборки новая шапка окажется на всех страницах.

Jekyll, Hugo, Eleventy, Astro, SvelteKit

Генераторов сотни, и принцип у них один. Различаются язык, скорость и привычки. Вот пять самых полезных для знакомства.

ИнструментОткудаЧем известен
Jekyll2008, Rubyклассика, на нём работают GitHub Pages; шаблоны Liquid
Hugo2013, Goочень быстрая сборка тысяч страниц, один исполняемый файл
Eleventy2018, JavaScriptгибкий и простой, поддерживает много языков шаблонов
Astro2021, JavaScriptсоздан для сайтов содержания, шлёт браузеру минимум JavaScript
SvelteKit2020-е, JavaScriptполноценный фреймворк: умеет собирать страницы заранее

Курс, который вы читаете, устроен так же. Каждый урок это файл Markdown с метаданными (мы называем их front matter), компоненты Svelte для живых схем, а сайт собирается в папку готовых HTML-файлов и лежит на бесплатном хостинге. Это SvelteKit в режиме предсборки.

Как выбрать? Если нужен просто сайт со страницами и коллекциями, годится любой. Hugo берут за скорость на больших сайтах, Eleventy за простоту, Astro когда страницы почти не требуют скриптов, SvelteKit когда сайту нужны ещё и живые интерфейсы. Знакомство с одним из них поможет освоить остальные.

Что получаем и чем платим

Плюсы статического сайта: быстрый (отдаётся готовый файл), безопасный (на сервере нет кода и базы), дешёвый (хостинг для статики часто бесплатен), с историей (каждая правка в Git, откат одной командой), переносимый (папку можно положить куда угодно).

Минусы:

  • нет привычной админки: редактор должен уметь править файлы и отправлять изменения в Git (позже мы увидим, как это упрощает «безголовая» CMS);
  • динамики нет: формы, поиск, комментарии, оплата и личный кабинет подключаются как внешние сервисы или функции (урок 7);
  • сборка растёт вместе с числом страниц: для тысяч страниц нужны быстрый генератор и умная выкладка.

Практика

Вы в эпохе 2019 года: «статика» вернулась в моду, и вы переносите свой сайт на генератор. В странице проект из четырёх видов файлов: настройки, общий шаблон, по странице Markdown на каждый раздел брифа и коллекция из ваших услуг. Допишите настройки и шаблон (язык, шапка с меню и подвал), заполните страницы и выведите услуги в каталоге циклом.

Заметьте одну особенность. Редактор курса сам подставляет значения вашего брифа в простые двойные скобки, поэтому в шаблонах задачи рядом с каждым значением стоит безобидный фильтр: {{ site.title | escape }}. В настоящем Jekyll вы писали бы просто {{ site.title }}.

Что было не так с 2019 годом

Генераторы 2019-го были замечательны для разработчиков и тяжелы для остальных. Установка Jekyll на Windows превращалась в испытание, сборка большого сайта длилась минутами, а редактору приходилось осваивать Git, чтобы поправить одну опечатку. Эти же проблемы решали следующие шаги: быстрые сборщики, визуальные редакторы поверх Git и «безголовые» CMS, о которых следующий урок.

Практика

Готовлю вашу страницу…

Тест

Вопрос 1 из 6

Расставьте по порядку, что делает генератор статических сайтов при сборке

Расставьте по порядку кнопками «выше» и «ниже».

Карточки

Эти карточки попадут в повторение, когда вы завершите урок.

  • Что такое Markdown?

    Ответ

    Простой способ писать текст с разметкой обычными знаками: # заголовок, - пункт списка, **жирный**, [ссылка](адрес). Превращается в HTML. Его придумали в 2004 году, а строгий общий вариант называется CommonMark.

  • Что такое front matter?

    Ответ

    Блок настроек страницы в начале файла Markdown между строками «---»: title, description, date и другие поля. Шаблон берёт их оттуда, коллекции по ним сортируют.

  • Что делает генератор статического сайта?

    Ответ

    При сборке читает Markdown и данные, разбирает front matter, подставляет данные в шаблон и записывает готовые HTML-файлы. На сервере остаются обычные файлы.

  • Плюсы и минусы статического сайта

    Ответ

    Плюсы: быстро, безопасно (нечего взламывать), дёшево или бесплатно, история в Git. Минусы: нет привычной админки, динамику (формы, поиск, оплату) берут из сервисов, а сборка растёт с числом страниц.

  • Чем отличаются Jekyll, Hugo, Eleventy, Astro, SvelteKit?

    Ответ

    Jekyll (Ruby, 2008) классика GitHub Pages. Hugo (Go) самый быстрый. Eleventy (JS) гибкий. Astro (2021) для сайтов содержания с минимумом JavaScript. SvelteKit полноценный фреймворк с предсборкой страниц.

Источники

Дальше

Теперь вы знаете: Markdown и front matter, генератор статических сайтов: шаблоны, сборка, вывод в HTML, Jekyll, Hugo, Eleventy, Astro, SvelteKit: чем отличаются.