Генераторы статических сайтов и 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, справа готовая страница. Услуги выводятся циклом по данным.
Это учебный генератор, а не 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
Генераторов сотни, и принцип у них один. Различаются язык, скорость и привычки. Вот пять самых полезных для знакомства.
| Инструмент | Откуда | Чем известен |
|---|---|---|
| Jekyll | 2008, Ruby | классика, на нём работают GitHub Pages; шаблоны Liquid |
| Hugo | 2013, Go | очень быстрая сборка тысяч страниц, один исполняемый файл |
| Eleventy | 2018, JavaScript | гибкий и простой, поддерживает много языков шаблонов |
| Astro | 2021, JavaScript | создан для сайтов содержания, шлёт браузеру минимум JavaScript |
| SvelteKit | 2020-е, 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 Guide: Basic Syntax CC BY-SA, по-английски
- CommonMark: справка по Markdown CC BY-SA, по-английски
- Jekyll: Front Matter только ссылка, по-английски
- Hugo: Introduction только ссылка, по-английски
- Eleventy Docs только ссылка, по-английски
- Astro Docs: начало работы только ссылка, по-русски
Дальше
Теперь вы знаете: Markdown и front matter, генератор статических сайтов: шаблоны, сборка, вывод в HTML, Jekyll, Hugo, Eleventy, Astro, SvelteKit: чем отличаются.