MDX позволяет объединять Markdown и JSX, предоставляя гибкий способ создания интерактивного контента в проектах на JavaScript. Одним из ключевых аспектов работы с MDX является настройка конфигурации и управление параметрами плагинов, которые расширяют возможности обработки контента.
Конфигурация MDX строится на основе объекта options,
который передается в функцию MDXProvider или при
использовании пакетов вроде @mdx-js/mdx и
@mdx-js/loader. Важнейшие поля этого объекта:
remarkPlugins – массив плагинов для
remark, которые обрабатывают Markdown до преобразования в
AST (Abstract Syntax Tree).rehypePlugins – массив плагинов для
rehype, которые работают с HTML-деревом после
преобразования MDX в HTML.providerImportSource – позволяет
указать источник для MDX-провайдера, что полезно при интеграции с
кастомными компонентами.Пример базовой конфигурации:
import { mdx } from '@mdx-js/react';
import remarkGfm from 'remark-gfm';
import rehypeSlug from 'rehype-slug';
const mdxOptions = {
remarkPlugins: [remarkGfm],
rehypePlugins: [rehypeSlug],
};
remarkPluginsПлагины remark позволяют расширять синтаксис Markdown,
добавлять поддержку новых конструкций и изменять AST на ранней стадии
обработки. Важные моменты:
[plugin, options].Пример подключения с параметрами:
import remarkFootnotes from 'remark-footnotes';
const mdxOptions = {
remarkPlugins: [
[remarkFootnotes, { inlineNotes: true }]
],
};
rehypePluginsrehype работает с HTML-деревом, что позволяет добавлять
атрибуты, обрабатывать ссылки, изображения и интегрировать внешние
библиотеки. Основные принципы:
[plugin, options].Пример с rehype:
import rehypeAutolinkHeadings from 'rehype-autolink-headings';
import rehypeHighlight from 'rehype-highlight';
const mdxOptions = {
rehypePlugins: [
[rehypeAutolinkHeadings, { beh * avior: 'wrap' }],
[rehypeHighlight, { ignoreMissing: true }]
],
};
Большинство плагинов поддерживает конфигурацию через объект опций. Рекомендовано:
[plugin, options] вместо
глобальных изменений, чтобы избежать конфликтов с другими
плагинами.Пример с несколькими плагинами и кастомными опциями:
import remarkMath from 'remark-math';
import rehypeKatex from 'rehype-katex';
const mdxOptions = {
remarkPlugins: [
[remarkMath, { strict: true }]
],
rehypePlugins: [
[rehypeKatex, { throwOnError: false }]
],
};
Плагины remark и rehype могут влиять друг
на друга. Основные моменты:
remarkPlugins применяются до преобразования Markdown в
JSX/HTML.rehypePlugins применяются после генерации HTML, что
позволяет добавлять дополнительные атрибуты, классы или интеграции.Для более гибкой работы с плагинами и компонентами MDX можно указать
providerImportSource. Это позволяет использовать
собственный компонент MDXProvider, который передает
контекст плагинов и глобальные компоненты.
Пример:
import { MDXProvider } from './CustomMDXProvider';
<MDXProvider components={customComponents} mdxOptions={mdxOptions}>
<Content />
</MDXProvider>
При использовании MDX в проектах на TypeScript рекомендуется:
Partial или
Record<string, any> для гибких конфигураций
плагинов.Пример типизации:
import type { Pluggable } from 'unified';
const remarkPlugins: Pluggable[] = [
[remarkFootnotes, { inlineNotes: true }]
];
remark и rehype могут конфликтовать по
преобразованиям AST.Конфигурация MDX с вниманием к параметрам плагинов обеспечивает гибкость, масштабируемость и предсказуемость обработки контента, делая систему Markdown + JSX максимально мощной и управляемой.