
Pug – это шаблонизатор для HTML, который использует минималистичный синтаксис без избыточных тегов и закрывающих скобок. Его главная особенность – зависимость от отступов, благодаря чему структура документа становится максимально наглядной. Например, вложенность элементов задаётся пробелами, а не громоздкими тегами.
В отличие от стандартного HTML, Pug позволяет использовать переменные, циклы и условия прямо в разметке. Это значительно ускоряет генерацию страниц, так как один шаблон можно применять к множеству разных данных. При компиляции шаблон преобразуется в чистый HTML, который корректно интерпретируется браузером.
Работает Pug в связке с Node.js, что делает его особенно удобным в проектах на Express или Koa. Шаблоны можно хранить в отдельных файлах и подключать частями: это упрощает поддержку больших проектов и помогает повторно использовать одинаковые блоки интерфейса. В реальных условиях это снижает риск ошибок и ускоряет разработку.
Pug HTML: что это и как работает шаблонизатор

Ключевые особенности Pug:
- Генерация HTML через компактный синтаксис без избыточных символов.
- Поддержка переменных, условий и циклов прямо в шаблоне.
- Возможность использования миксинов для повторно применяемых блоков.
- Наследование и расширение шаблонов, что облегчает работу с макетами.
Принцип работы:
- Разработчик пишет код в файле с расширением
.pug. - Pug компилирует этот код в чистый HTML.
- На выходе получается оптимизированная HTML-страница с динамическими данными.
Практические рекомендации:
- Использовать миксины для кнопок, карточек и повторяющихся компонентов.
- Организовывать шаблоны через
extendsиblock, чтобы легко управлять структурой проекта. - При работе с большими проектами хранить компоненты в отдельных файлах и подключать их через
include. - Активно использовать интерполяцию
#{}для динамического контента.
Установка Pug и подключение к проекту

Для установки Pug требуется Node.js и менеджер пакетов npm. Проверить наличие можно командами node -v и npm -v. Если версии отображаются, можно переходить к установке.
Установка в проект выполняется через команду npm install pug --save. Для глобального использования утилиты Pug в терминале применяется npm install pug-cli -g. После этого становится доступна команда pug для компиляции шаблонов.
В проектах на Express подключение выполняется через app.set('view engine', 'pug') и размещение файлов с расширением .pug в папке views. Сборщики, такие как Webpack или Gulp, используют плагины pug-loader или gulp-pug, что позволяет автоматизировать компиляцию при изменениях.
Файлы шаблонов обычно хранятся в структуре views/ или src/templates/. При компиляции в HTML команда pug index.pug --pretty генерирует читаемый результат. Для автоматической перекомпиляции используется параметр --watch.
Синтаксис отступов и отличие от HTML

В Pug структура документа формируется с помощью отступов, а не парных тегов. Каждый уровень вложенности задаётся количеством пробелов или табуляцией. Например, блок внутри div пишется с отступом, без необходимости явно закрывать тег.
В HTML обязательны открывающий и закрывающий теги: <ul><li>Текст</li></ul>. В Pug та же конструкция выглядит так:
ul
li Текст
Такой подход делает шаблон компактнее, снижает риск несогласованности тегов и упрощает чтение вложенных структур. Однако важно строго соблюдать одинаковый тип отступов во всём файле, иначе интерпретатор выдаст ошибку.
Рекомендуется использовать два пробела вместо табуляции, чтобы избежать конфликтов при совместной разработке. В отличие от HTML, перенос строки и уровень отступа в Pug имеют прямое значение для корректного результата.
Использование переменных внутри шаблона
Пример передачи переменной:
// app.js
res.render("index", { title: "Главная", count: 5 });
// index.pug
h1= title
p Количество элементов: #{count}
Вложенные структуры (объекты, массивы) позволяют обращаться к конкретным полям:
// app.js
res.render("user", { user: { name: "Анна", age: 29 } });
// user.pug
p Имя: #{user.name}
p Возраст: #{user.age}
Для удобства можно использовать условия и циклы с переменными:
ul
each item in items
li= item
Основные варианты использования переменных в Pug:
| Ситуация | Синтаксис | |
|---|---|---|
= |
h1= title |
|
| Вставка в строку | #{} |
p Привет, #{name} |
| Неэкранированный HTML | != |
div!= htmlContent |
| Цикл по массиву | each item in items |
li= item |
| Обращение к полю объекта | obj.key |
p #{user.email} |
Вставка циклов и условий в разметку
В Pug для обхода массивов и объектов применяются конструкции each и for. Например:
Пример:
ul
each item in ['Node.js', 'Express', 'Pug']
li= item
Результат:
<ul>
<li>Node.js</li>
<li>Express</li>
<li>Pug</li>
</ul>
Для условий используется оператор if, а также else if и else:
Пример:
if user.isAdmin
p Администратор
else if user.isEditor
p Редактор
else
p Гость
Внутри циклов можно вставлять условия для фильтрации элементов. Например, исключение пустых значений:
ul
each product in products
if product.available
li= product.name
Создание и подключение миксинов
Миксины в Pug позволяют повторно использовать фрагменты шаблонов с параметрами. Создаются они с помощью ключевого слова mixin, после которого указывается имя и список параметров в скобках.
Пример создания миксина кнопки с параметрами text и type:
mixin button(text, type='button')
button(type=type)= text
Подключение миксина осуществляется вызовом его имени с аргументами:
+button('Отправить', 'submit')
Если необходимо использовать блок содержимого внутри миксина, применяется ключевое слово block:
mixin card(title)
div.card
h3= title
block
Вызов с содержимым:
+card('Заголовок карты')
p Содержимое карты
Для подключения миксинов из других файлов используется директива include. Например, если миксины хранятся в mixins.pug:
include mixins.pug
+button('Сохранить')
Рекомендуется группировать миксины по функционалу и давать им информативные имена, чтобы упрощать поддержку и переиспользование кода.
Организация структуры проекта с Pug

Для удобства разработки и масштабируемости проекта с Pug рекомендуется разделять шаблоны по функциональным категориям. Основная структура обычно включает папки views, layouts, partials и components. Папка views содержит все конечные страницы, которые рендерятся сервером или системой сборки.
layouts хранит базовые шаблоны страниц, например main.pug, включающий doctype, head и общие блоки header и footer. Внутри страниц из views подключаются нужные layout через extends и определяются секции с помощью block.
partials предназначена для небольших фрагментов кода, используемых на нескольких страницах: навигация, карточки товаров, виджеты. Эти фрагменты подключаются через include, что позволяет избежать дублирования кода.
components – это отдельные, переиспользуемые элементы с собственными стилями и логикой, например модальные окна, кнопки или формы. Их структура должна быть модульной: отдельная папка на каждый компонент с файлами Pug, CSS/SCSS и, при необходимости, JS.
Для упрощения навигации в проекте можно создавать вложенные папки внутри views, например views/products или views/blog, сохраняя иерархию URL. Внутри этих папок страницы наследуют общий layout и используют partials для повторяющихся элементов.
Важный принцип организации – минимизация глубины вложенности и единообразие имен файлов. Файлы Pug должны иметь понятные имена, соответствующие назначению, чтобы команда могла быстро находить нужные шаблоны без просмотра кода. Такой подход ускоряет сборку, упрощает масштабирование и поддержку проекта.
Компиляция Pug в HTML и автоматизация процесса
Прямой способ компиляции через командную строку:
- Установите Pug CLI:
npm install -g pug-cli - Скомпилируйте файл:
pug src/index.pug --out dist/ - Результат – валидный HTML в папке
dist
Для автоматизации процесса используют задачи сборки. Пример через Gulp:
- Установите Gulp и плагин Pug:
npm install --save-dev gulp gulp-pug - Создайте
gulpfile.jsс задачей:
const gulp = require('gulp');
const pug = require('gulp-pug');
gulp.task('pug', () =>
gulp.src('src/**/*.pug')
.pipe(pug({ pretty: true }))
.pipe(gulp.dest('dist'))
);
- Запуск:
gulp pugкомпилирует все Pug-файлы автоматически - Добавление
gulp.watch('src/**/*.pug', gulp.series('pug'))обеспечивает автоматическую перекомпиляцию при изменении исходников
Использование Webpack или Vite позволяет интегрировать Pug в модульную систему. В этом случае Pug-файлы обрабатываются через загрузчики (pug-loader для Webpack или vite-plugin-pug), что упрощает работу с компонентами и динамическим контентом.
Рекомендации по оптимизации:
- Использовать опцию
pretty: falseдля минимизации HTML в продакшн-сборках - Разделять шаблоны на частичные файлы для повторного использования (
includeиextend) - Комбинировать Pug с препроцессорами CSS и JS для полной автоматизации сборки проекта
Вопрос-ответ:
Что такое Pug и для чего его используют?
Pug — это шаблонизатор для HTML, который позволяет создавать разметку с использованием сокращённого синтаксиса. Он упрощает процесс написания HTML, сокращает количество кода и делает структуру страниц более наглядной. С помощью Pug можно вставлять переменные, управлять циклическими конструкциями и условными блоками прямо в шаблонах, что особенно удобно при работе с динамическими сайтами.
Как устроен синтаксис Pug и чем он отличается от обычного HTML?
В Pug отсутствуют закрывающие теги и скобки, которые обязательны в HTML. Структура документа определяется отступами, как в языке Python. Теги пишутся просто по имени, а вложенность задаётся с помощью отступов. Атрибуты указываются в скобках после тега. Такой подход делает код более компактным и снижает вероятность ошибок с закрывающими тегами.
Можно ли использовать переменные и условия внутри шаблонов Pug?
Да, Pug поддерживает вставку переменных, циклы и условные конструкции. Например, можно передавать данные из JavaScript и отображать их в шаблоне. Условия записываются с помощью ключевых слов if, else, циклы — через each. Это позволяет формировать страницы с динамическим содержимым без необходимости вручную генерировать HTML-код для каждого элемента.
Как происходит процесс преобразования Pug в HTML?
Pug-файл сначала компилируется в обычный HTML. Компилятор анализирует структуру, учитывает переменные и конструкции управления, а затем создаёт корректный HTML-код. Полученный HTML можно использовать в браузере как обычную страницу. Такой подход ускоряет разработку и позволяет поддерживать чистоту и читаемость кода.
Какие преимущества использования Pug в проекте?
Pug позволяет писать меньше кода и делает шаблоны более структурированными. Благодаря поддержке переменных и циклов уменьшается дублирование кода. Кроме того, шаблоны легко изменять и поддерживать, что удобно при работе с большими проектами. Подключение внешних файлов и компонентов тоже становится проще, так как Pug поддерживает инклюды и миксины для повторно используемых блоков разметки.
Что такое Pug и чем он отличается от обычного HTML?
Pug — это шаблонизатор для HTML, который позволяет писать разметку в более компактном и читабельном виде. В отличие от стандартного HTML, где теги нужно открывать и закрывать явно, в Pug используются отступы для обозначения вложенности элементов, а синтаксис минималистичен. Кроме того, Pug поддерживает вставку переменных, условные конструкции и циклы, что облегчает создание динамических страниц и повторяющихся блоков без дублирования кода.
Как Pug обрабатывает переменные и условия внутри шаблонов?
В Pug можно передавать данные из приложения напрямую в шаблон. Переменные вставляются через специальный синтаксис с подстановкой значений, что позволяет отображать динамическую информацию на странице. Для условий используется ключевое слово if и логические выражения, а для циклов — each, что позволяет создавать списки или таблицы на основе массива данных. Такая возможность делает шаблоны более гибкими и упрощает управление содержимым, не требуя изменения структуры HTML вручную.
