Marked — это библиотека на JavaScript для парсинга и рендеринга Markdown в HTML. Она обеспечивает высокую скорость работы, поддержку расширений и гибкую настройку. В основе работы лежит трансформация Markdown-разметки в HTML-код, что позволяет использовать её как на сервере, так и в браузере.
Для использования Marked в проекте на Node.js библиотеку устанавливают через npm:
npm install marked
В браузере подключение возможно через CDN:
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
После подключения объект marked становится доступен и
предоставляет набор методов для работы с Markdown.
Простейший пример конвертации строки Markdown в HTML:
const marked = require('marked');
const markdownString = `
# Заголовок первого уровня
**Жирный текст** и *курсив*.
`;
const html = marked.parse(markdownString);
console.log(html);
Результатом будет HTML:
<h1>Заголовок первого уровня</h1>
<p><strong>Жирный текст</strong> и <em>курсив</em>.</p>
Метод marked.parse() является основным способом
получения HTML-кода из Markdown.
Marked предоставляет объект marked.Renderer, позволяющий
переопределять стандартные элементы HTML. Например:
const renderer = new marked.Renderer();
renderer.heading = (text, level) => {
return `<h${level} class="custom-heading">${text}</h${level}>`;
};
const html = marked.parse('# Заголовок', { renderer });
console.log(html);
Такой подход позволяет создавать собственные стили и изменять поведение рендеринга отдельных элементов Markdown.
Marked поддерживает множество настроек через объект конфигурации:
true).<br>.Пример использования конфигурации:
marked.setOptions({
gfm: true,
breaks: true,
smartLists: true,
smartypants: true
});
Marked разбивает Markdown на токены с помощью встроенного лексера:
const tokens = marked.lexer(markdownString);
console.log(tokens);
Лексер возвращает массив объектов, где каждый объект представляет отдельный элемент Markdown, например заголовок, параграф, список и т.д. Это удобно для анализа документа и построения кастомного рендерера.
Для работы с большими объемами Markdown или при необходимости
асинхронного рендеринга Marked предоставляет
marked.parseAsync():
(async () => {
const html = await marked.parseAsync(markdownString);
console.log(html);
})();
Асинхронная версия поддерживает все опции и кастомные рендереры, что делает её удобной для работы в серверных приложениях с большим количеством данных.
По умолчанию Marked не фильтрует HTML внутри Markdown. Для
предотвращения XSS-атак рекомендуется использовать дополнительную
библиотеку, например DOMPurify:
const DOMPurify = require('dompurify');
const dirtyHtml = marked.parse(markdownString);
const cleanHtml = DOMPurify.sanitize(dirtyHtml);
Это особенно важно при работе с пользовательским вводом.
Marked поддерживает расширения через кастомные токены и рендереры. Можно добавить поддержку новых синтаксисов, нестандартных блоков кода или интеграцию с другими библиотеками. Это делает Marked гибким инструментом для построения Markdown-редакторов и конвертеров.
.md в HTML-страницы.Marked сочетает в себе высокую производительность и простоту интеграции, сохраняя при этом гибкость благодаря настройкам рендерера, токенов и асинхронного парсинга.