Постпроцессинг в контексте MDX — это этап, который следует после первичной компиляции MDX-файла в JavaScript-код. Он позволяет модифицировать итоговую структуру, добавлять обертки, интегрировать кастомные компоненты и выполнять оптимизации, которые невозможно сделать на этапе парсинга. Этот процесс критически важен для проектов, где Markdown используется совместно с React-компонентами.
MDX-компилятор сначала преобразует содержимое .mdx в AST
(Abstract Syntax Tree) на основе Markdown и JSX-синтаксиса. После этого
AST превращается в JavaScript-код. Постпроцессинг позволяет
вмешиваться на любом из двух уровней:
MDX поддерживает плагины для обработки контента как на этапе компиляции, так и после. Их можно разделить на три категории:
Remark-плагины — работают на уровне Markdown. Позволяют:
Rehype-плагины — работают с HTML-представлением AST. Возможности:
<h1>-<h6> заголовков;MDX-плагины — непосредственно модифицируют JSX-выход:
<p> в кастомный
компонент;Для конфигурации используется объект mdxOptions при
вызове функции compile из пакета
@mdx-js/mdx:
import { compile } from '@mdx-js/mdx';
import remarkSlug from 'remark-slug';
import rehypeAutolinkHeadings from 'rehype-autolink-headings';
const mdxOptions = {
remarkPlugins: [remarkSlug],
rehypePlugins: [rehypeAutolinkHeadings],
providerImportSource: '@mdx-js/react'
};
const compiledMDX = await compile('# Заголовок\n\nТекст', mdxOptions);
В этом примере:
remarkSlug добавляет уникальные ID для всех
заголовков;rehypeAutolinkHeadings автоматически оборачивает
заголовки в ссылки;providerImportSource позволяет использовать контекст
MDXProvider для глобальных компонентов.Для унификации стилей или добавления дополнительной логики часто используют обертки на уровне JSX:
import { MDXProvider } from '@mdx-js/react';
import CustomParagraph from './CustomParagraph';
const components = {
p: CustomParagraph
};
export default function MDXContent({ content }) {
return (
<MDXProvider components={components}>
{content}
</MDXProvider>
);
}
Каждый элемент <p> будет автоматически заменён на
CustomParagraph, что обеспечивает единообразие оформления
текста и возможность внедрять интерактивные функции.
Постпроцессинг позволяет производить оптимизацию кода и контента:
mdx.config.js, чтобы избежать дублирования настроек.compile вместо старого
@mdx-js/mdx.sync, если нужен асинхронный постпроцессинг с
динамическими плагинами.key) для
списков, чтобы избежать ошибок рендеринга.Постпроцессинг в MDX — мощный инструмент, позволяющий гибко управлять контентом, интегрировать его с React-компонентами и оптимизировать вывод. Правильная настройка плагинов и оберток обеспечивает чистый, поддерживаемый и расширяемый код MDX.