From 2d5c2cc3ad3af9e127cde883bd98c5e00a54787d Mon Sep 17 00:00:00 2001 From: DrakesBot12 Date: Sat, 13 Jun 2026 13:22:21 +0300 Subject: [PATCH 1/2] HTML-Preprocessors --- tools/html-preprocessors/index.md | 340 ++++++++++++++++++++++++++++++ tools/index.md | 1 + 2 files changed, 341 insertions(+) create mode 100644 tools/html-preprocessors/index.md diff --git a/tools/html-preprocessors/index.md b/tools/html-preprocessors/index.md new file mode 100644 index 0000000000..d7d886b1a8 --- /dev/null +++ b/tools/html-preprocessors/index.md @@ -0,0 +1,340 @@ +--- +title: "Препроцессоры `HTML`" +description: "Разбираемся, зачем нужны препроцессоры `HTML`, какие задачи они решают и чем отличаются друг от друга." +authors: + - drakesbot12 +keywords: + - html + - preprocessors + - pug + - nunjucks + - handlebars + - ejs +related: + - tools/nodejs + - tools/gulp + - tools/bundlers +tags: + - article +--- + +## Что это такое + +`HTML` отлично подходит для описания структуры страницы. Но чем больше становится проект, тем чаще хочется переиспользовать повторяющиеся фрагменты разметки, разбивать большие страницы на части и автоматически генерировать однотипный код. + +Для решения таких задач существуют **препроцессоры `HTML`**. + +Препроцессор берёт специальный шаблон или набор файлов и превращает их в обычный `HTML`, который понимает браузер. + +Схема работы выглядит так: + +Шаблон → Препроцессор → HTML + +Браузер не умеет работать с препроцессорами напрямую. Перед публикацией проекта их результат всегда преобразуется в обычный `HTML`. + +## Немного истории + +Проблема повторяющейся разметки появилась почти сразу после того, как сайты перестали быть набором из нескольких `HTML`-страниц. + +В конце 1990-х и начале 2000-х разработчики начали использовать серверные языки для сборки страниц из отдельных частей. Например, в `PHP` можно было подключать один файл внутри другого: + +```php + +``` + +Это позволяло хранить шапку сайта в одном месте и использовать её на всех страницах. + +Позже появились полноценные шаблонизаторы. Они добавили переменные, условия и циклы, благодаря которым `HTML` можно было генерировать автоматически. + +Одними из популярных решений стали: +- **Smarty** для PHP; +- **Twig** для PHP; +- **Jinja** для Python; +- **Handlebars** для JavaScript. + +Со временем начали появляться и специализированные `HTML`-препроцессоры. Они были ориентированы не только на подстановку данных, но и на более удобное написание разметки. + +Например, в 2010 году появился **`Jade`**, который позже переименовали в **`Pug`**. Он предложил компактный синтаксис без угловых скобок и быстро стал популярным среди разработчиков на `Node.js`. + +Затем получили распространение генераторы статических сайтов. Они используют шаблонизаторы и препроцессоры для сборки готового `HTML` ещё до публикации сайта. + +Сегодня `HTML`-препроцессоры чаще всего встречаются в: +- генераторах статических сайтов; +- системах документации; +- блогах; +- корпоративных сайтах; +- серверных веб-приложениях. + +Хоть современные фреймворки часто предлагают собственные способы создания интерфейсов, идея остаётся той же: писать шаблоны удобнее, чем вручную поддерживать большое количество повторяющегося `HTML`-кода. + +## Зачем они нужны + +Представьте сайт из нескольких десятков страниц. На каждой есть одинаковые шапка, подвал и меню. + +Без дополнительных инструментов придётся копировать один и тот же код в каждый файл: + +```html +
+ +
+``` + +Если понадобится изменить меню, придётся редактировать все страницы. + +Препроцессоры позволяют вынести общий код в отдельный шаблон и подключать его там, где он нужен. + +Кроме переиспользования компонентов они помогают: +- разбивать большие страницы на маленькие части; +- вставлять данные в шаблоны; +- создавать циклы и условия; +- генерировать повторяющуюся разметку; +- собирать статические сайты. + +## Чем препроцессоры отличаются от шаблонизаторов + +Термины часто используют как синонимы, но между ними есть небольшая разница. + +**Шаблонизатор** отвечает за генерацию `HTML` из шаблона и данных. + +Например: + +```html +

{{ title }}

+``` + +После обработки шаблон может превратиться в такой `HTML`: + +```html +

Главная страница

+``` + +**Препроцессор `HTML`** — более широкое понятие. Он может включать шаблонизатор, систему сборки, обработку файлов и другие возможности. + +На практике эти термины часто пересекаются, поэтому строгого разделения нет. + +## Популярные решения + +За время существования веба появилось множество `HTML`-препроцессоров и шаблонизаторов. Некоторые из них стали частью отдельных экосистем, а некоторые используются до сих пор в самых разных проектах. + +### `Pug` + +**`Pug`** (ранее назывался **`Jade`**) — один из самых известных ``HTML``-препроцессоров для `JavaScript`-экосистемы. + +Его главная особенность — отказ от привычных `HTML`-тегов в пользу сокращённого синтаксиса на основе отступов. + +Вместо такого `HTML`: + +```html +
+

Привет, мир!

+

Это абзац текста.

+
+``` + +можно написать: + +```pug +main + h1 Привет, мир! + p Это абзац текста. +``` + +После компиляции получится обычный `HTML`. + +**`Pug`** поддерживает: +- переменные; +- условия; +- циклы; +- подключение других файлов; +- шаблоны и наследование шаблонов; +- миксины (`mixins`) — аналог компонентов. + +Например, миксин можно использовать для создания переиспользуемого блока: + +```pug +mixin button(text) + button.button= text + ++button('Отправить') +``` + +Плюсы **`Pug`**: +- компактный синтаксис; +- меньше повторяющегося кода; +- удобная работа с компонентами. + +Минусы: +- требуется изучить новый синтаксис; +- ошибки в отступах могут ломать структуру документа; +- `HTML` становится менее узнаваемым. + +Сегодня **`Pug`** чаще встречается в проектах на `Node.js` и в генераторах статических сайтов. + +### `Nunjucks` + +**`Nunjucks`** — шаблонизатор от Mozilla, вдохновлённый Python-шаблонизатором `Jinja`. + +В отличие от **`Pug`** он сохраняет привычный `HTML` и добавляет специальные конструкции для динамического содержимого. + +Переменные записываются так: + +```html +

{{ title }}

+``` + +Условия выглядят так: + +```html +{% if isLoggedIn %} +

Вы вошли в систему

+{% endif %} +``` + +Циклы: + +```html + +``` + +Одно из самых сильных мест **`Nunjucks`** — работа с шаблонами. + +Можно создать базовый шаблон страницы: + +```html + + + + {% block title %}{% endblock %} + + + {% block content %}{% endblock %} + + +``` + +А затем расширять его: + +```html +{% extends "layout.njk" %} + +{% block title %} + Главная +{% endblock %} +``` + +Такой подход особенно удобен для блогов, документации и многостраничных сайтов. + +**`Nunjucks`** используется во многих статических генераторах сайтов, включая Eleventy. + +### `Handlebars` + +**`Handlebars`** развивает идеи более раннего шаблонизатора `Mustache`. + +Его философия проста: шаблон отвечает только за отображение данных, а логика должна находиться в коде приложения. + +Пример шаблона: + +```html +

{{title}}

+

{{description}}

+``` + +Подстановка данных: + +```js +{ + title: 'Дока', + description: 'Добрый справочник для веб-разработчиков' +} +``` + +Результат: + +```html +

Дока

+

Добрый справочник для веб-разработчиков

+``` + +**`Handlebars`** поддерживает: +- переменные; +- циклы; +- условия; +- пользовательские помощники (`helpers`); +- частичные шаблоны (`partials`). + +Пример подключения повторно используемого шаблона: + +```html +{{> header}} +``` + +**`Handlebars`** долгое время активно использовался в `JavaScript`-приложениях и до сих пор встречается в различных `CMS` и инструментах сборки. + +Его главное преимущество — простота. Даже человек, плохо знакомый с `JavaScript`, быстро поймёт такой шаблон. + +### `EJS` + +Название **`EJS`** расшифровывается как `Embedded JavaScript`. + +Главная идея — возможность писать обычный `JavaScript` прямо внутри `HTML`-шаблона. + +Например: + +```html + +``` + +Условия выглядят так: + +```html +<% if (isAdmin) { %> +

Панель администратора

+<% } %> +``` + +**`EJS`** практически не вводит собственных конструкций и позволяет использовать уже знакомый `JavaScript`. + +Это одновременно плюс и минус. + +Плюсы: +- низкий порог входа для `JavaScript`-разработчиков; +- высокая гибкость; +- минимальное количество новых правил. + +Минусы: +- шаблоны могут быстро превращаться в смесь `HTML` и логики; +- сложные файлы становятся труднее поддерживать. + +**`EJS`** часто используется в приложениях на `Node.js` вместе с `Express`. + +## Когда стоит использовать препроцессор + +Препроцессор может пригодиться, если: + +- в проекте много повторяющейся разметки; +- нужно собирать статический сайт; +- требуется генерировать страницы из данных; +- хочется разделить большие `HTML`-файлы на небольшие части. + +Для небольших страниц или простых лендингов дополнительный этап сборки может оказаться лишним. + +## Что выбрать? + +У каждого решения своя область применения. + +- **`Pug`** подойдёт тем, кто хочет максимально сократить объём `HTML`. +- **`Nunjucks`** удобен для документации, блогов и статических сайтов. +- **`Handlebars`** хорошо подходит для простых шаблонов с минимальным количеством логики. +- **`EJS`** понравится разработчикам, которые хотят использовать обычный `JavaScript` внутри шаблонов. + +Выбор зависит не столько от возможностей инструмента, сколько от требований проекта и предпочтений команды. diff --git a/tools/index.md b/tools/index.md index c8d5a6f9d5..8ca7410205 100644 --- a/tools/index.md +++ b/tools/index.md @@ -68,6 +68,7 @@ groups: - deno - rollup - gulp + - html-preprocessors - name: Развёртывание проекта items: From 875a863e90209be67d667c6fa2aed858ad62c3c5 Mon Sep 17 00:00:00 2001 From: Alena Batitskaia Date: Sun, 30 Aug 2026 03:49:52 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D1=82=20=D0=B2=D0=B5=D1=82=D0=BA=D1=83=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit