Markdown и MDX
Markdown обычно используется для создания текстового контента, такого как блоги и документация. Astro включает встроенную поддержку стандартных файлов Markdown, которые также могут включать frontmatter YAML для определения пользовательских метаданных, таких как заголовок, описание и теги.
С интеграцией @astrojs/mdx Astro также поддерживает файлы MDX (.mdx
), которые добавляют дополнительные функции, такие как поддержка JavaScript-выражений и компонентов в вашем Markdown-контенте.
Используйте один или оба типа файлов для написания материалов в формате Markdown!
Страницы Markdown и MDX
Заголовок раздела Страницы Markdown и MDXКоллекции контента
Заголовок раздела Коллекции контентаВы можете управлять своими файлами Markdown и MDX в Astro в специальной папке src/content/
. Коллекции контента помогут вам организовать контент, проверить frontmatter и обеспечить автоматическую безопасность типов TypeScript при работе с контентом.
Директорияsrc/content/
Директорияnewsletter/
- week-1.md
- week-2.md
Директорияauthors/
- grace-hopper.md
- alan-turing.md
Узнайте больше об использовании коллекций контента в Astro.
Маршрутизация на основе файлов
Заголовок раздела Маршрутизация на основе файловAstro рассматривает любой файл .md
(или другое поддерживаемое расширение) или .mdx
внутри директории /src/pages/
как страницу.
Помещение файла в эту директорию или любую поддиректорию автоматически построит маршрут страницы по имени файла.
Возможности Markdown
Заголовок раздела Возможности MarkdownAstro предоставляет некоторые дополнительные, встроенные функции Markdown, доступные при использовании Markdown и MDX файлов.
Frontmatter layout
Заголовок раздела Frontmatter layoutAstro предоставляет страницам Markdown и MDX (расположенным в src/pages/
) специальное свойство frontmatter layout
, которое может указывать относительный путь (или псевдоним) к компоненту макета Astro.
Определенные свойства затем доступны компоненту макета через Astro.props
. Например, вы можете получить доступ к свойствам frontmatter через Astro.props.frontmatter
:
Вы также можете стилизовать Markdown в своем компоненте макета.
Идентификаторы заголовков
Заголовок раздела Идентификаторы заголовковИспользование заголовков в Markdown и MDX автоматически дает вам якорные ссылки, чтобы вы могли напрямую ссылаться на определенные разделы вашей страницы.
Astro генерирует id
заголовков на основе github-slugger
. Больше примеров вы можете найти в документации github-slugger.
Эскапирование специальных символов
Заголовок раздела Эскапирование специальных символовНекоторые символы имеют особое значение в Markdown и MDX. Для их отображения может потребоваться другой синтаксис. Для этого вы можете использовать HTML entities для этих символов.
Например, чтобы <
не интерпретировался как начало HTML-элемента, напишите <
. Или, чтобы {
не интерпретировался как начало выражения JavaScript в MDX, напишите {
.
Возможности только для MDX
Заголовок раздела Возможности только для MDXДобавление интеграции MDX от Astro обогащает вашу работу с Markdown переменными JSX, выражениями и компонентами.
Кроме того, это добавляет дополнительные функции к стандартному MDX, включая поддержку frontmatter в стиле Markdown в MDX. Это позволяет использовать большинство встроенных функций Markdown, таких как свойство frontmatter layout
от Astro.
Файлы .mdx
должны быть написаны на синтаксисе MDX, а не на HTML-подобном синтаксисе Astro.
Использование экспортируемых переменных в MDX
Заголовок раздела Использование экспортируемых переменных в MDXMDX поддерживает использование операторов export
для добавления переменных в содержимое MDX. Эти переменные доступны как в самом шаблоне, так и в виде именованных свойств при импорте файла куда-либо еще.
Например, вы можете экспортировать поле title
из MDX-страницы или компонента, чтобы использовать его в качестве заголовка с помощью {JSX-выражений}
:
Использование переменных Frontmatter в MDX
Заголовок раздела Использование переменных Frontmatter в MDXИнтеграция Astro MDX включает поддержку использования frontmatter в MDX по умолчанию. Добавляйте свойства frontmatter так же, как и в Markdown-файлах, и эти переменные будут доступны для использования в шаблоне, в его компоненте layout
и как именованные свойства при импорте файла в другом месте.
Использование компонентов в MDX
Заголовок раздела Использование компонентов в MDXПосле установки интеграции MDX вы можете импортировать и использовать как компоненты Astro, так и компоненты UI-фреймворка в файлах MDX (.mdx
) так же, как вы бы использовали их в любом другом компоненте Astro.
Не забудьте включить директиву client:directive
в ваши компоненты UI-фреймворка, если это необходимо!
Дополнительные примеры использования операторов import и export можно найти в документации по MDX.
Присвоение пользовательских компонентов элементам HTML
Заголовок раздела Присвоение пользовательских компонентов элементам HTMLС помощью MDX вы можете назначать синтаксис Markdown пользовательским компонентам вместо их стандартных HTML-элементов. Это позволяет вам писать в стандартном синтаксисе Markdown, но применять специальные стили компонентов к выбранным элементам.
Импортируйте свой пользовательский компонент в файл .mdx
, затем экспортируйте объект components
, который сопоставляет стандартный элемент HTML с вашим пользовательским компонентом:
Посетите сайт MDX для получения полного списка HTML-элементов, которые могут быть перезаписаны как пользовательские компоненты.
Импорт Markdown
Заголовок раздела Импорт MarkdownВы можете импортировать файлы Markdown и MDX непосредственно в файлы Astro. Это дает вам доступ к их содержимому в формате Markdown, а также к другим свойствам, таким как значения frontmatter, которые могут быть использованы в JSX-подобных выражениях Astro.
Вы можете импортировать одну конкретную страницу с помощью оператора import
или несколько страниц с помощью Astro.glob()
.
Когда вы импортируете Markdown и MDX файлы в компонент Astro, вы получаете объект, содержащий их экспортированные свойства.
В MDX-файлах вы можете получить доступ к свойствам как из операторов frontmatter, так и из операторов export
:
Вы можете дополнительно указать тип для переменной frontmatter
, используя обобщённый тип TypeScript:
Экспортированные свойства
Заголовок раздела Экспортированные свойстваПосмотрите свойства, экспортируемые в компонент макета Astro, когда используется особый макет frontmatter Astro.
Следующие свойства доступны компоненту .astro
при использовании оператора import
или Astro.glob()
:
file
- Абсолютный путь к файлу (например,/home/user/projects/.../file.md
).url
- Если это страница, то URL страницы (например,/ru/guides/markdown-content
).frontmatter
- Содержит любые данные, указанные в YAML frontmatter файла.getHeadings
- Асинхронная функция, возвращающая массив всех заголовков (т.е. элементовh1 -> h6
) в файле.slug
каждого заголовка соответствует сгенерированному идентификатору для данного заголовка и может использоваться для якорных ссылок. Этот список имеет вид:{ depth: number; slug: string; text: string }[]
.Content
- компонент, который возвращает полное, отрендеренное содержимое файла.- (только для Markdown)
rawContent()
- Функция, возвращающая необработанный документ Markdown в виде строки. - (только Markdown)
compiledContent()
- Функция, возвращающая документ Markdown, скомпилированный в строку HTML. Обратите внимание, что сюда не входят макеты, настроенные в вашем frontmatter! Будет возвращен только сам документ Markdown в виде HTML. - (только MDX) - MDX-файлы также могут экспортировать данные с помощью оператора
export
.
Компонент Content
Заголовок раздела Компонент ContentИмпортируйте Content
, чтобы создать компонент, возвращающий полное содержимое Markdown или MDX-файла:
Пример: Динамическая маршрутизация страниц
Заголовок раздела Пример: Динамическая маршрутизация страницВместо того чтобы помещать файлы Markdown/MDX в каталог src/pages/
для создания маршрутов страниц, вы можете генерировать страницы динамически.
Чтобы получить доступ к содержимому в формате Markdown, передайте компонент <Content/>
через props
страницы Astro. Затем вы можете получить компонент из Astro.props
и отобразить его в шаблоне страницы.
Экспорт только в MDX
Заголовок раздела Экспорт только в MDXMDX-файлы также могут экспортировать данные с помощью оператора export
.
Например, вы можете экспортировать поле title
из MDX-страницы или компонента.
Этот title
будет доступен из операторов import
и Astro.glob():
Пользовательские компоненты с импортированным MDX
Заголовок раздела Пользовательские компоненты с импортированным MDXПри рендеринге импортированного MDX-контента пользовательские компоненты могут быть переданы через свойство components
.
Пользовательские компоненты, определенные и экспортированные в MDX-файл, должны быть импортированы, а затем переданы обратно в компонент <Content />
через свойство components
.
Настройка Markdown и MDX
Заголовок раздела Настройка Markdown и MDXПоддержка Markdown в Astro осуществляется с помощью remark, мощного инструмента для разбора и обработки с активной экосистемой. Другие парсеры Markdown, такие как Pandoc и markdown-it, в настоящее время не поддерживаются.
По умолчанию Astro применяет плагины GitHub-flavored Markdown и SmartyPants. Это дает некоторые преимущества, такие как генерация кликабельных ссылок из текста и форматирование для кавычек и тире.
Вы можете настроить, как remark будет разбирать ваш Markdown в astro.config.mjs
. Смотрите полный список опций конфигурации Markdown.
Плагины Markdown
Заголовок раздела Плагины MarkdownAstro поддерживает добавление сторонних плагинов remark и rehype для Markdown и MDX. Эти плагины позволяют расширить Markdown новыми возможностями, такими как автоматическая генерация оглавления, применение доступных меток к эмодзи и стилизация Markdown.
Мы рекомендуем ознакомиться с awesome-remark и awesome-rehype для популярных плагинов! Инструкции по установке смотрите в README каждого плагина.
В этом примере remark-toc
и rehype-accessible-emojis
применяются как к Markdown, так и к MDX-файлам:
Обратите внимание, что по умолчанию remarkToc
требует наличия на странице заголовка “ToC” или “Table of Contents” heading (без учета регистра), чтобы показать оглавление.
Идентификаторы заголовков и плагины
Заголовок раздела Идентификаторы заголовков и плагиныAstro внедряет атрибут id
во все элементы заголовков (от <h1>
до <h6>
) в файлах Markdown и MDX и предоставляет утилиту getHeadings()
для извлечения этих идентификаторов в экспортируемых свойствах Markdown.
Вы можете настроить эти идентификаторы заголовков, добавив плагин rehype, который вводит атрибуты id
(например, rehype-slug
). Ваши пользовательские идентификаторы, вместо установленных Astro по умолчанию, будут отражаться в HTML-выводе и элементах, возвращаемых функцией getHeadings()
.
По умолчанию Astro вводит атрибуты id
после запуска ваших плагинов rehype. Если одному из ваших собственных плагинов rehype нужен доступ к идентификаторам, вводимым Astro, вы можете импортировать и использовать плагин Astro rehypeHeadingIds
напрямую. Обязательно добавьте rehypeHeadingIds
перед всеми плагинами, которые полагаются на него:
getHeadings()
возвращает только заголовки, записанные непосредственно в самом файле Markdown или MDX. Если MDX-файл импортирует компоненты, содержащие свои собственные заголовки, они не будут возвращены getHeadings()
.
Настройка плагина
Заголовок раздела Настройка плагинаДля того чтобы настроить плагин, предоставьте после него объект options во вложенном массиве.
Пример ниже добавляет опцию heading к плагину remarkToc
, чтобы изменить место размещения оглавления, и опцию behavior
к плагину rehype-autolink-headings
, чтобы добавить тег якоря после текста заголовка.
Программное изменение frontmatter
Заголовок раздела Программное изменение frontmatterЕсли вы используете коллекции контента, обратитесь к разделу “Изменение Frontmatter с помощью Remark”.
Вы можете добавить свойства frontmatter во все ваши файлы Markdown и MDX с помощью плагина remark или rehype.
-
Добавьте
customProperty
к свойствуdata.astro.frontmatter
из аргументаfile
вашего плагина:Добавлено в:astro@2.0.0
data.astro.frontmatter
содержит все свойства данного документа Markdown или MDX. Это позволяет изменять существующие свойства frontmatter или вычислять новые свойства из существующего frontmatter. -
Примените этот плагин к конфигурации интеграции
markdown
илиmdx
:или
Теперь каждый файл Markdown или MDX будет содержать customProperty
в своем frontmatter, что делает его доступным при импорте вашего markdown и из свойства Astro.props.frontmatter
в ваших макетах.
Расширение конфигурации Markdown из MDX
Заголовок раздела Расширение конфигурации Markdown из MDXИнтеграция Astro в MDX по умолчанию расширяет существующую конфигурацию Markdown вашего проекта. Чтобы отменить отдельные опции, вы можете указать их эквивалент в конфигурации MDX.
Следующий пример отключает GitHub-Flavored Markdown и применяет другой набор плагинов ремарок для файлов MDX:
Чтобы не расширять конфигурацию Markdown из MDX, установите опцию extendMarkdownConfig
(включенную по умолчанию) в false
:
Выделение синтаксиса
Заголовок раздела Выделение синтаксисаAstro поставляется со встроенной поддержкой Shiki и Prism. Это обеспечивает подсветку синтаксиса для:
- всех кодовых заборов (```), используемых в файле Markdown или MDX.
- содержимого внутри встроенного компонента
<Code />
(powered by Shiki). - содержимое компонента
<Prism />
(работает на Prism).
Shiki включена по умолчанию, предварительно настроена на тему github-dark
. Компилируемый вывод будет ограничен встроенным style
без посторонних CSS-классов, таблиц стилей или клиентского JS.
Конфигурация Shiki
Заголовок раздела Конфигурация ShikiShiki - это наш инструмент подсветки синтаксиса по умолчанию. Вы можете настроить все параметры через объект shikiConfig
следующим образом:
Добавление собственной темы
Заголовок раздела Добавление собственной темыВместо того чтобы использовать одну из предопределенных тем Shiki, вы можете импортировать собственную тему из локального файла.
Мы также рекомендуем прочитать документацию по темам Shiki, чтобы узнать больше о темах, переключателях светлого и темного режимов, а также о стилизации с помощью переменных CSS.
Изменение режима подсветки синтаксиса по умолчанию
Заголовок раздела Изменение режима подсветки синтаксиса по умолчаниюЕсли вы хотите переключиться на режим 'prism'
по умолчанию или полностью отключить подсветку синтаксиса, вы можете использовать объект конфигурации markdown.syntaxHighlighting
:
Конфигурация Prism
Заголовок раздела Конфигурация PrismЕсли вы решили использовать Prism, Astro будет применять CSS-классы Prism. Обратите внимание, что вам нужно принести свою собственную таблицу стилей CSS, чтобы появилась подсветка синтаксиса!
- Выберите готовую таблицу стилей из доступных тем Prism.
- Добавьте эту таблицу стилей в директорию
public/
вашего проекта. - Загрузите ее в
<head>
вашей страницы через компонент макета с помощью тега<link>
. (См. Базовое использование Prism.)
Вы также можете посетить список языков, поддерживаемых Prism для получения информации о возможностях и использовании.
Получение удаленного Markdown
Заголовок раздела Получение удаленного MarkdownAstro в первую очередь был разработан для локальных файлов Markdown, которые могут быть сохранены внутри каталога вашего проекта. Однако в некоторых случаях вам может потребоваться получить Markdown из удаленного источника. Например, вам может понадобиться получать и рендерить Markdown из удаленного API, когда вы создаете свой сайт (или когда пользователь делает запрос на ваш сайт, при использовании SSR).
Astro не включает встроенную поддержку удаленного Markdown! Чтобы получить удаленный Markdown и преобразовать его в HTML, вам нужно установить и настроить свой собственный парсер Markdown из npm. Он не будет наследоваться от встроенных в Astro настроек Markdown и MDX, которые вы настроили. Убедитесь, что вы понимаете эти ограничения, прежде чем внедрять его в свой проект.
Learn