Markdown & MDX
Markdown обычно используется для создания текстового контента, такого как записи в блогах и документация.
Astro имеет встроенную поддержку стандартных файлов Markdown (.md
).
С интеграцией @astrojs/mdx integration (EN),
Astro так же поддерживает MDX (.mdx
) файлы, которые предоставляют дополнительные функции, такие как поддержка
выражений JavaScript и компонентов в вашем Markdown контенте.
Используйте один или оба типа файлов, чтобы писать Markdown контент!
Markdown и MDX страницы
Astro определяет любые .md
или .mdx
файлы внутри директории /src/pages/
как страницы.
Размещение файла в этой директории или любой поддиректории автоматически создаст роут страницы, используя путь к файлу.
📚 Прочитать больше о роутинге основанную на файлах.
Простой пример
Чтобы начать использовать Markdown в Astro, добавьте новый файл page-1.md
к вашему проекту в папке src/pages/
.
Скопируйте приведенный ниже базовый шаблон в свой файл, а затем просмотрите отрисованный HTML-код в предварительном просмотре вашего браузера.
Обычно, это http://localhost:4321/page-1.
Frontmatter layout
Astro предоставляет страницам Markdown и MDX специальное свойство frontmatter для layout
, которое определяет относительный путь к
Astro компоненту макета. Этот компонент обернет содержимое Markdown,
предоставив обертку страницы и любые другие элементы шаблона страницы.
Типичный макет для страниц Markdown включает в себя:
- Свойство
frontmatter
для доступа кfrontmatter
страницы и прочим данным. Посмотрите Свойства макета Markdown для получения полного списка доступных свойств. - Слот
<slot />
для определения, куда разместить Markdown контент.
Вы можете задать типы для свойств макета через MarkdownLayoutProps
:
Свойства Markdown макета
Markdown макет имеет доступ к следующей информации, через Astro.props
:
file
- Абсолютный путь к файлу (т.е./home/user/projects/.../file.md
).url
- URL к странице, если это страница (т.е./en/guides/markdown-content
).frontmatter
- frontmatter из Markdown или MDX документа.frontmatter.file
- Такой же, как верхне-уровневое свойствоfile
.frontmatter.url
- Tакой же, как верхне-уровневое свойствоurl
.
headings
- Список заголовков (h1 -> h6
) в Markdown документе с соответствующими метаданными. Этот список соответствует типу:{ depth: number; slug: string; text: string }[]
.rawContent()
- Функция, которая возвращает необработанный документ Markdown в виде строки.compiledContent()
- Функция, которая возвращает документ Markdown, скомпилированный в HTML-строку.
Пример поста в блоге может передавать следующий Astro.props
объект в свой макет:
Пример: Использование одного макета для файлов .md
, .mdx
и .astro
Единый макет Astro может быть написан для получения объекта frontmatter
из файлов .md
и .mdx
,
а также любых именованных свойств, переданных из .astro
файлов.
В приведенном ниже примере макет отобразит заголовок страницы либо из компонента Astro, передающего атрибут title
, либо из frontmatter свойства title
:
Идентификаторы заголовков в Markdown
Astro автоматически добавит автоматически сгенерированные идентификаторы ко всем заголовкам в файлах Markdown, используя github-slugger. Но, если указан пользовательский идентификатор, он не будет переопределен.
Эти дочерние элементы будут добавлены после выполнения всех остальных плагинов,
поэтому, если у вас есть плагин типа rehype-toc
, которому нужны идентификаторы,
вам следует добавить свой собственный плагин для блокировки (например, rehype-slug
).
Markdown черновики
draft: true
- это необязательное frontmatter свойство, которое помечает отдельную страницу или публикацию .md
как “неопубликованную”.
По умолчанию эта страница будет исключена из сборки сайта.
Страницы Markdown без свойства draft
или страницы с draft: false
будут включены в сборку.
Хотя draft: true
предотвратит создание страницы на вашем сайте по этому роуту страницы,
Astro.glob()
(EN) в настоящее время возвращает все ваши файлы Markdown.
Чтобы исключить черновики из архива или списка последних постов, вы можете отфильтровать результаты, возвращаемые вашим Astro.glob().
⚙️ Чтобы включить создание черновиков:
Добавьте drafts: true
в markdown
, в файле astro.config.mjs
Вы также можете передать флаг --drafts
при запуске astro build
для создания черновиков!
Переменные и Компоненты
Astro v1.0 поддерживает только стандартный Markdown в .md
файлах.
Возможность использовать компоненты или JSX в Markdown страницах более не включен по умолчанию
и поддержка в конечном итоге будет полностью удалена.
Конфиг Astro поддерживает устаревший флаг legacy.astroFlavoredMarkdown
, который
повторно включит эти функции на страницах Markdown, пока вы не сможете перейти на MDX в Astro.
Интеграция MDX в Astro - рекомендуемый вариант, если вам нужно больше возможностей, чем предоставляет стандартный Markdown.
Пожалуйста, установите официальную интеграцию @astros/mdx
(EN), чтобы использовать:
-
Переменные и JSX выражения в MDX (
.mdx
) файлах. -
Astro компоненты или компоненты UI фреймворков (EN) в MDX (
.mdx
) файлах.
MDX возможности
Astro включает в себя полную поддержку MDX, в официальной интеграции @astros / mdx
.
Смотрите руководство по интеграции MDX (EN) для дополнительной информации по интеграции,
которая поддерживает устаревшие функции из предыдущего раздела и улучшает ваш Markdown контент.
Использование Переменных в MDX
С интеграцией @astrojs/mdx
вы можете использовать переменные и выражения JSX в файлах MDX (.mdx
).
Использование Компонентов в MDX
С интеграцией @astrojs/mdx
, вы можете использовать компоненты Astro или других UI фреймворков в MDX (.mdx
) файлах
точно так же, как вы бы использовали их в любом другом компоненте Astro (EN).
Не забудьте добавить client:directive
, если это необходимо!
Импорт Markdown
Вы можете импортировать файлы Markdown и MDX непосредственно в свои Astro файлы!
Вы можете импортировать одну конкретную страницу с помощью import
или несколько страниц с помощью Astro.glob()
.
Вы можете дополнительно указать тип для переменной frontmatter
, используя TypeScript дженерик:
Экспортированные свойства
Каждый файл Markdown экспортирует следующие свойства.
frontmatter
Содержит любые данные, указанные в YAML frontmatter этого файла.
file
Абсолютный путь к этому файлу (т.е. /home/user/projects/.../file.md
).
url
Если это страница, URL страницы (т.е. /en/guides/markdown-content
).
getHeadings()
Асинхронная функция, которая возвращает заголовки в Markdown файле. Ответ соответствует типу:
rawContent()
Функция, которая возвращает содержимое файла в формате Markdown (исключая блок frontmatter) в виде строки.
Если вы планируете использовать rawContent для расчета значений, таких как “время чтения”, мы предлагаем использовать плагин remark или rehype для вставки frontmatter! Посмотрите наш пример расчета времени для дополнительной информации.
compiledContent()
Функция, которая возвращает спарсенный HTML-документ в виде строки. Примечание: сюда не входят макеты, настроенные в вашем frontmatter! Только сам документ markdown будет возвращен в формате HTML.
Для пользователей legacy.astroFlavoredMarkdown
:
Это не парсит {jsx выражения}
или <Components />
.
Только стандартные Markdown блоки, такие как ## headings
и - lists
, будут спарсены в HTML.
Content
Компонент, который возвращает полное отрендеренное содержимое файла Markdown. Пример:
При использовании getStaticPaths
и Astro.glob()
для создания страниц из файлов Markdown вы можете передать компонент <Content/>
через props
страницы.
Затем вы можете извлечь компонент из Astro.props
и отобразить его в своем шаблоне.
Конфигурация Markdown
Поддержка Markdown в Astro осуществляется с помощью remark, мощный инструмент синтаксического анализа и обработки с активной экосистемой. Другие анализаторы Markdown, такие как Pandoc и markdown-it, в настоящее время не поддерживаются.
Вы можете настроить то, как remark парсит ваш Markdown, в astro.config.mjs
.
Смотрите справочную документацию (EN) для получения полной информации о конфигурации
или следуйте нашим руководствам ниже о том, как добавлять remark плагины и настраивать подсветку синтаксиса.
Приведенные ниже инструкции предназначены для настройки стандартного Markdown. Чтобы настроить плагины MDX и параметры frontmatter, пожалуйста, ознакомьтесь с соответствующим разделом в Руководстве по интеграции MDX (EN).
Markdown плагины
Astro поддерживает сторонние плагины remark и rehype для Markdown. Эти плагины позволяют вам расширить свой Markdown новыми возможностями, как автоматическое создание оглавления, использование emoji с a11y и многое другое. Мы рекомендуем вам просмотреть awesome-remark и awesome-rehype для поиска плагинов!
В этом примере включаются remark-toc и rehype-minify плагины. Инструкции по установке смотрите в README каждого проекта.
Astro использует плагины GitHub-flavored Markdown
и Smartypants по умолчанию.
Это привносит некоторые приятности, такие как создание кликабельных ссылок из текста и форматирование кавычек для удобства чтения.
При добавлении своих собственных плагинов вы можете сохранить эти значения по умолчанию с помощью флага extendDefaultPlugins
.
Remark-rehype параметры
Содержимое Markdown преобразуется в HTML с помощью remark-rehype, который имеет несколько опций.
Вы можете использовать параметры remark-rehype в вашем конфигурационном файле следующим образом:
Внедрение frontmatter
Возможно, вы захотите добавить свойства frontmatter в свои файлы Markdown программно. Используя плагины remark или rehype, вы можете сгенерировать эти свойства на основе содержимого файла.
Вы можете добавить к свойству data.astro.frontmatter
аргумент file
вашего плагина следующим образом:
После подключения плагина к вашей markdown
конфигурации:
…каждый файл Markdown будет иметь customProperty
в frontmatter!
Это доступно при импорте вашего markdown и из свойства Astro.props.frontmatter
в ваших макетах.
Пример: рассчитать время чтения
Вы можете использовать плагин remark, чтобы добавить время чтения к вашему frontmatter. Мы рекомендуем два пакета:
reading-time
чтобы рассчитать минуты чтенияmdast-util-to-string
чтобы извлечь весь текст из вашего markdown
Мы можем использовать эти пакеты с плагином remark следующим образом:
Как только вы примените этот плагин к своей конфигурации:
…все документы Markdown будут иметь рассчитанные minutesRead
.
Вы можете использовать это, чтобы включить баннер “X минут чтения” в макет markdown, например:
Подсветка синтаксиса
Astro идет со встроенной поддержкой для Shiki и Prism. Это обеспечивает подсветку синтаксиса для:
- все обрамления кода (```) в Markdown (
.md
) и MDX (.mdx
) файле. - содержимое компонента
<Code />
(EN) (Shiki) или компонента<Prism />
(EN) (Prism).
Shiki включен по умолчанию, предварительно настроен с темой github-dark
.
Скомпилированный вывод будет ограничен инлайновым style
, без каких-либо посторонних классов CSS, таблиц стилей или JS на стороне клиента.
Если вы решите использовать Prism, вместо этого мы применим CSS-классы Prism. Обратите внимание, что вам необходимо создать свой собственный CSS, чтобы появилась подсветка синтаксиса! Смотрите раздел по конфигурации Prism для получения более подробной информации.
Выберите подсветку синтаксиса
Shiki - это наш инструмент подсветки синтаксиса по умолчанию.
Если вы хотите переключиться на 'prism'
или полностью отключить подсветку синтаксиса, вы можете использовать объект конфигурации markdown
:
Конфигурация Shiki
При использовании Shiki вы будете настраивать все параметры с помощью объекта shikiConfig
следующим образом:
Мы также предлагаем углубиться в их документацию по темизации чтобы ознакомится с загрузкой пользовательской темы, с переключателем “светлого и темного” режима или стилизацию через переменные CSS.
Конфигурация Prism
При использовании Prism вам нужно будет добавить таблицу стилей в свой проект для подсветки синтаксиса. Если вы только начинаете и предпочитаете использовать Prism вместо Shiki, мы предлагаем:
- Установить
syntaxHighlight: 'prism'
в вашем конфиге@astrojs/markdown-remark
. - Выбор готовой таблицы стилей из доступных тем Prism.
- Добавить эту таблицу стилей в
public/
вашего проекта/. - Добавьте это в ваш
<head>
(EN) через тег<link>
.
Вы также можете посетить список языков, поддерживаемых Prism для получения информации о параметрах.
Получение удаленного Markdown
Astro был в первую очередь разработан для локальных файлов Markdown, которые хранятся внутри вашего проекта. Однако могут быть определенные случаи, когда вам необходимо получить Markdown из удаленного источника. Например, вам может потребоваться извлечь и отобразить Markdown из удаленного API при создании вашего веб-сайта (или когда пользователь делает запрос на ваш веб-сайт, при использовании SSR (EN)).
Astro не включает встроенную поддержку удаленного Markdown! Чтобы получить удаленный Markdown и отобразить его в HTML, вам нужно будет установить и настроить свой собственный парсер Markdown из npm. Это не будет зависеть ни от каких встроенных параметров Markdown и MDX, которые вы настроили. Убедитесь, что вы понимаете эти ограничения, прежде чем внедрять это в свой проект.
Learn