Markdown-it — это мощная и гибкая библиотека для парсинга Markdown в JavaScript, обеспечивающая высокую производительность и расширяемость через плагины. Одной из важных задач при работе с Markdown-документами является обработка метаданных — дополнительной информации, не входящей напрямую в текст, но используемой для управления выводом, настройками или интеграцией с внешними системами.
Метаданные в Markdown часто хранятся в формате YAML Front Matter или специальных блоках внутри текста. Примеры включают заголовки документа, дату создания, автора, категории, теги, а также произвольные пользовательские данные. Основная задача — выделить эти данные и сделать их доступными для дальнейшей обработки.
const MarkdownIt = require('markdown-it');
const md = new MarkdownIt({
html: true,
linkify: true,
typographer: true
});
Параметры конфигурации позволяют включать поддержку HTML-тегов, автоматически распознавать ссылки и использовать типографские символы. Это важно, так как метаданные могут содержать HTML или ссылки.
Markdown-it не имеет встроенной поддержки Front Matter, поэтому для
работы с метаданными часто применяются плагины. Один из популярных
вариантов — markdown-it-front-matter.
const frontMatter = require('markdown-it-front-matter');
let metadata = {};
md.use(frontMatter, (fm) => {
metadata = parseYAML(fm); // parseYAML — функция для разбора YAML
});
js-yaml, для преобразования текста метаданных в объект
JavaScript.const yaml = require('js-yaml');
function parseYAML(fmText) {
try {
return yaml.load(fmText);
} catch (e) {
console.error('Ошибка разбора метаданных:', e);
return {};
}
}
После разбора Front Matter объект метаданных можно использовать для различных целей: настройка шаблонов, генерация заголовков, фильтрация контента. Например, при рендеринге HTML:
const content = `
---
title: "Пример документа"
author: "Иван Иванов"
date: "2026-03-22"
tags: ["JavaScript", "Markdown-it"]
---
# Заголовок документа
Текст документа.
`;
md.use(frontMatter, (fm) => {
metadata = parseYAML(fm);
});
const html = md.render(content);
console.log(metadata.title); // "Пример документа"
console.log(html); // HTML-документ без Front Matter
Markdown-it поддерживает добавление собственных токенов и правил парсинга. Это позволяет интегрировать метаданные, хранящиеся внутри текста, а не только в Front Matter.
md.core.ruler.push('collect_metadata', function (state) {
state.tokens.forEach(token => {
if (token.type === 'inline' && token.content.startsWith('meta:')) {
const [, key, value] = token.content.match(/^meta:\s*(\w+)\s*=\s*(.+)$/);
metadata[key] = value;
}
});
});
collect_metadata.inline.meta:, парсится и
добавляется в объект metadata.Метаданные позволяют управлять генерацией страниц, например, формировать списки статей по тегам, сортировать по дате, менять оформление в зависимости от автора. Совмещение Markdown-it и Front Matter делает это особенно удобным:
function renderArticle(content) {
metadata = {};
const html = md.render(content);
return {
html,
metadata
};
}
const article = renderArticle(content);
if (article.metadata.tags.includes('JavaScript')) {
console.log('Это статья по JavaScript');
}
Метаданные превращают Markdown-документы из простого текста в управляемую структуру данных, интегрируемую с современными веб-приложениями и системами генерации статических сайтов.