Remark и Rehype — это две взаимосвязанные библиотеки для работы с Markdown и HTML в экосистеме JavaScript. Remark ориентирован на синтаксический разбор Markdown и манипуляцию его абстрактного синтаксического дерева (MDAST — Markdown Abstract Syntax Tree). Rehype работает с HTML, создавая и трансформируя HAST (HTML Abstract Syntax Tree). В контексте MDX они часто используются совместно для парсинга Markdown, обработки JSX внутри Markdown и преобразования в HTML или React-компоненты.
MDX расширяет возможности Markdown, позволяя вставлять JSX-компоненты прямо в текст. Для этого необходим корректный синтаксис импортов:
import Button from './Button';
import { Alert, Modal } from './UIComponents';
Особенности импорта:
./Button) и
абсолютные пути, если проект настроен соответствующим образом.Remark-плагины позволяют автоматически модифицировать импорты, например, добавлять их на основе содержимого документа или обрабатывать импорты для динамической подстановки.
MDX позволяет экспортировать не только React-компоненты, но и любые данные. Основной синтаксис:
export const metadata = {
title: 'Пример MDX',
description: 'Детальное руководство по Remark и Rehype'
};
export function Footer() {
return ;
}
Важные моменты:
metadata можно использовать для
генерации заголовков страниц или мета-тегов.Для использования Remark и Rehype с MDX часто применяются плагины
remark-mdx и rehype-mdx. Их задача — корректно
парсить MDX-документы, распознавая JSX внутри Markdown.
import { unified } from 'unified';
import remarkParse from 'remark-parse';
import remarkMdx from 'remark-mdx';
import rehypeStringify from 'rehype-stringify';
import remarkRehype from 'remark-rehype';
const processor = unified()
.use(remarkParse) // Парсинг Markdown
.use(remarkMdx) // Поддержка JSX в MDX
.use(remarkRehype) // Преобразование MDAST в HAST
.use(rehypeStringify); // Преобразование HAST в HTML
const result = processor.processSync('# Заголовок MDX\n');
console.log(String(result));
Принципы работы цепочки:
Такой подход обеспечивает гибкость: можно добавлять свои плагины на любом этапе обработки, например, автоматическую генерацию заголовков или ссылок.
Remark и Rehype позволяют создавать кастомные плагины, которые изменяют структуру дерева, включая импорты и экспорты. Например, можно автоматически добавлять импорт компонентов в MDX, если они используются в документе:
function autoImportComponents() {
return (tree) => {
const imports = [];
visit(tree, 'jsx', (node) => {
if (node.value.includes('
Особенности такого подхода:
В MDX поддерживаются оба вида экспорта, что открывает широкие возможности:
export default function Page() {
return Главная страница
;
}
export const author = 'Иван Иванов';
unified().use(...), чтобы обеспечить последовательную
обработку дерева.