MDX v2 представляет собой значительное обновление по сравнению с v1, ориентированное на повышение совместимости с современными инструментами экосистемы React и улучшение безопасности. Одним из ключевых изменений является переход на новый синтаксис экспорта и импорта компонентов, а также переработанная система обработки JSX внутри Markdown.
ESM вместо CommonJS: MDX v2 полностью
поддерживает стандарты ECMAScript Modules. В файлах теперь рекомендуется
использовать export вместо
module.exports.
Явный импорт React: Ранее MDX автоматически инжектировал React в скоуп. В v2 требуется явный импорт при работе с JSX-компонентами:
import React from 'react';Слоты и компоненты: Поддержка
MDXProvider осталась, но обработка компонентов стала более
строгой. Любой компонент, используемый внутри MDX, должен быть явно
передан через components объект.
MDX v2 улучшает интероперабельность между JSX и Markdown. Основные моменты:
JSX внутри Markdown теперь строго соответствует синтаксису React. Любые нестандартные конструкции, ранее разрешенные MDX v1, теперь могут вызвать ошибки компиляции.
Синтаксис кода: блоки с тройными обратными
кавычками (```) поддерживают указание языка, но теперь
требуется использование валидного имени языка для подсветки и интеграции
с инструментами типа rehype-prism.
```javascript
const sum = (a, b) => a + b;
Inline JSX: элементы можно вставлять прямо в текст, но они должны быть корректно закрыты:
Это пример <strong>выделенного текста</strong> в середине Markdown.MDX v2 отказалась от устаревшей системы плагинов и интегрировалась с
современными инструментами экосистемы unified:
remark, например,
remark-gfm для поддержки GitHub-flavored Markdown.rehype-slug добавляет ID заголовкам для
генерации оглавления..mdx файлов и
оптимизацию сборки.Процесс миграции требует изменения конфигурации сборщика и инструментов:
Webpack: необходимо заменить устаревший
@mdx-js/loader на современный @mdx-js/webpack
с поддержкой v2.
{
test: /\.mdx$/,
use: [
'babel-loader',
{
loader: '@mdx-js/loader',
options: {
remarkPlugins: [],
rehypePlugins: []
}
}
]
}Vite: подключение через плагин
vite-plugin-mdx с явным указанием
jsxImportSource.
Babel: настройка может потребовать добавления
плагина @babel/plugin-transform-react-jsx для корректной
трансформации JSX внутри MDX.
MDXProviderMDX v2 усилила строгую типизацию и контроль скоупа:
Любой компонент должен быть явно импортирован.
MDXProvider используется для глобальной подстановки
компонентов:
import { MDXProvider } from '@mdx-js/react';
import CustomButton from './CustomButton';
const components = {
button: CustomButton
};
<MDXProvider components={components}>
<Content />
</MDXProvider>Теперь возможна локальная передача компонентов
через components пропс для отдельных страниц или блоков
MDX, что повышает модульность и снижает глобальные зависимости.
Обновление зависимостей:
npm install @mdx-js/react@latest @mdx-js/loader@latestПроверка импорта React в каждом MDX-файле.
Замена устаревших синтаксисов (export default,
автоматический React-инжект) на современные стандарты.
Подключение необходимых remark и rehype
плагинов для совместимости с текущей версткой.
Тестирование рендеринга всех страниц с JSX и Markdown.
Обновление сборщиков (Webpack/Vite) для корректной обработки MDX v2 файлов.
Каждое изменение должно быть проверено на уровне сборки и рендеринга, чтобы избежать неожиданного поведения при строгой проверке JSX в новой версии.