MDX сочетает возможности Markdown и JSX, позволяя использовать компоненты React внутри документации, блогов и интерфейсов. Для эффективного применения MDX необходимо корректно интегрировать его с различными сборщиками, такими как Webpack, Vite, Rollup, а также с системами статической генерации вроде Next.js и Gatsby.
Для работы MDX с Webpack основной инструмент — это загрузчики
(loaders). Стандартная конфигурация включает:
module.exports = {
module: {
rules: [
{
test: /\.mdx?$/,
use: [
{
loader: '@mdx-js/loader',
options: {
// Возможность передавать компоненты
remarkPlugins: [],
rehypePlugins: [],
},
},
],
},
],
},
};
Ключевые моменты:
@mdx-js/loader преобразует .mdx в валидный
JSX.remarkPlugins позволяет работать с Markdown на
более глубоком уровне, например добавлять таблицы, сноски или кастомные
синтаксические расширения.rehypePlugins обрабатывает HTML после преобразования
Markdown в JSX, что важно для добавления классов, атрибутов или других
изменений в структуре документа.Для интеграции с React необходим babel-loader, чтобы JSX
корректно транспилировался.
Vite использует современный подход, основанный на ESM и быстрой пересборке:
import { defineConfig } from 'vite';
import mdx from '@mdx-js/rollup';
export default defineConfig({
plugins: [
mdx({
remarkPlugins: [],
rehypePlugins: [],
}),
],
});
Особенности интеграции:
@mdx-js/rollup), что позволяет использовать его в
современных проектах с быстрым HMR (Hot Module Replacement).import Page from './example.mdx'.В проектах на Rollup интеграция MDX строится через плагин:
import mdx from '@mdx-js/rollup';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
},
plugins: [
mdx({
remarkPlugins: [],
rehypePlugins: [],
}),
],
};
Особенности:
remarkPlugins и rehypePlugins
идентична Webpack и Vite.Next.js имеет собственную систему обработки MDX через
@next/mdx или сторонние библиотеки:
const withMDX = require('@next/mdx')({
extension: /\.mdx?$/,
options: {
remarkPlugins: [],
rehypePlugins: [],
},
});
module.exports = withMDX({
pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
});
Особенности:
pages/blog.mdx.next/dynamic.remark и rehype позволяет
создавать кастомные плагины для обработки контента перед
рендерингом.Gatsby использует плагин gatsby-plugin-mdx:
module.exports = {
plugins: [
{
resolve: 'gatsby-plugin-mdx',
options: {
remarkPlugins: [],
rehypePlugins: [],
gatsbyRemarkPlugins: [],
},
},
],
};
Особенности:
gatsby-node.js.Remark Plugins:
remark-math — поддержка математических формул.remark-slug — генерация уникальных идентификаторов для
заголовков.remark-autolink-headings — автоматическая генерация
ссылок на заголовки.Rehype Plugins:
rehype-highlight — подсветка синтаксиса в коде.rehype-slug — добавление id к
заголовкам.rehype-react — рендеринг HTML через компоненты
React.Правильная комбинация этих плагинов позволяет гибко управлять содержимым MDX-документов независимо от сборщика.
remark и rehype плагины могут конфликтовать,
важно проверять их последовательность.MDX, при правильной интеграции с выбранным сборщиком, позволяет строить масштабируемые проекты, где документация, блог или интерфейсная часть приложения могут использовать единую систему компонентов и разметки Markdown, полностью совместимую с React.