Когда использовать Remark/Rehype

Remark и Rehype — это мощные инструменты для обработки текстового контента в экосистеме JavaScript, работающие с разными уровнями представления данных. Remark ориентирован на работу с Markdown, тогда как Rehype предназначен для HTML-структур. Понимание того, когда использовать каждую библиотеку, позволяет выстроить эффективный и безопасный пайплайн обработки контента.


Обработка Markdown-документов

Remark является универсальным инструментом для анализа и трансформации Markdown. Ключевые сценарии использования:

  • Проверка и валидация контента Remark позволяет проверять Markdown на соответствие стилевым правилам, обнаруживать ошибки в синтаксисе, лишние пробелы, некорректные заголовки и ссылки. Например, с помощью плагина remark-lint можно задавать правила для организации заголовков, ограничения длины абзацев, обязательного использования alt-тегов для изображений.

  • Трансформация и генерация контента Remark позволяет создавать плагины для автоматического добавления оглавления, нумерации заголовков, вставки метаданных. Это особенно полезно при генерации документации или статей, где структура Markdown должна быть стандартизирована.

  • Препроцессинг перед HTML-рендерингом Remark может подготовить Markdown к дальнейшей обработке в Rehype. Например, конвертировать специальные синтаксические расширения, такие как кастомные блоки или компоненты, в AST, удобный для дальнейшей трансформации.


Обработка HTML и JSX

Rehype работает с HTML-структурами и предоставляет возможности для их анализа, модификации и генерации. Основные сценарии применения:

  • Валидация HTML-кода Rehype позволяет проверять корректность HTML-разметки, находить не закрытые теги, дублированные атрибуты и некорректные вложения. Плагины вроде rehype-validate помогают соблюдать стандарты и предотвращать ошибки, которые могут вызвать некорректное отображение страниц.

  • Трансформация HTML Можно автоматически модифицировать HTML-структуры: добавлять атрибуты к тегам, инлайнить стили, реорганизовывать дерево документа. Это особенно полезно при работе с Markdown, конвертированным через Remark в HTML, и при генерации статических сайтов.

  • Интеграция с React и другими фронтенд-библиотеками Rehype позволяет преобразовывать HTML в формат, совместимый с JSX. Это открывает возможность использовать Markdown-контент напрямую в компонентах React, сохраняя семантику и структуру документа.


Комбинированные пайплайны

На практике Remark и Rehype часто используются вместе, создавая последовательный процесс обработки контента:

  1. Парсинг Markdown в AST Remark преобразует исходный Markdown в дерево узлов (MDAST — Markdown Abstract Syntax Tree), предоставляя структурированное представление документа.

  2. Трансформация и расширение контента Плагины Remark модифицируют AST, добавляют метаданные, проверяют стиль и форматирование.

  3. Конвертация в HTML Remark может передать AST в Rehype, который преобразует Markdown в HTML-дерево (HAST — HTML Abstract Syntax Tree) с сохранением структуры и атрибутов.

  4. Финальная обработка HTML Rehype выполняет оптимизацию и доработку HTML: вставку классов, обработку ссылок, улучшение доступности, генерацию атрибутов для SEO.


Примеры типовых задач

  • Документация и блоги: Remark проверяет Markdown на корректность и стиль, Rehype добавляет классы для подсветки кода, обрабатывает ссылки и изображения.
  • Статические сайты и генераторы контента: Remark превращает Markdown в структурированные данные, Rehype конвертирует их в чистый HTML или JSX для React.
  • CMS и редакторы контента: Remark позволяет валидировать и нормализовать пользовательский Markdown, Rehype обеспечивает безопасный HTML для отображения на сайте.

Ключевые моменты выбора

  • Использовать Remark, если основная работа ведется с Markdown: парсинг, линтинг, генерация структуры.
  • Использовать Rehype, если задача связана с HTML: трансформация, валидация, подготовка для фронтенда.
  • Совместное использование Remark → Rehype эффективно для сложных пайплайнов, когда Markdown необходимо превратить в высококачественный HTML с дополнительными атрибутами и метаданными.

Стратегический выбор между Remark и Rehype определяется тем, на каком уровне структуры контента требуется вмешательство: исходный Markdown или уже сгенерированный HTML.