Для работы с Marked необходимо сначала установить её через npm:
npm install marked
После установки библиотеку можно подключить в проекте:
import { marked } from 'marked';
Если используется старый синтаксис CommonJS:
const { marked } = require('marked');
Библиотека Marked позволяет конвертировать текст в формате Markdown в HTML. Самый простой пример:
const markdownText = `
# Заголовок первого уровня
Это простой абзац с **жирным текстом** и *курсивом*.
- Элемент списка 1
- Элемент списка 2
`;
const html = marked(markdownText);
console.log(html);
В результате получаем HTML, полностью готовый к вставке на страницу:
<h1>Заголовок первого уровня</h1>
<p>Это простой абзац с <strong>жирным текстом</strong> и <em>курсивом</em>.</p>
<ul>
<li>Элемент списка 1</li>
<li>Элемент списка 2</li>
</ul>
marked.parse()Метод marked.parse() выполняет ту же функцию, что и
вызов marked(markdownText), но его использование более явно
указывает на процесс парсинга Markdown в HTML:
const html = marked.parse(markdownText);
marked.parseInline()Позволяет обработать только встроенные элементы
Markdown, такие как жирный, курсив или ссылки, без создания тегов
<p> или блоков заголовков:
const inlineHtml = marked.parseInline("Это **жирный** текст");
console.log(inlineHtml); // <p>Это <strong>жирный</strong> текст</p>
Marked предоставляет возможность создавать собственные правила
рендеринга через объект Renderer:
const renderer = new marked.Renderer();
renderer.heading = function (text, level) {
return `<h${level} class="custom-heading">${text}</h${level}>`;
};
const htmlCustom = marked(markdownText, { renderer });
console.log(htmlCustom);
С помощью собственного рендерера можно изменять HTML-представление заголовков, ссылок, списков, изображений и других элементов Markdown.
Для предотвращения XSS-атак и вывода небезопасного HTML Marked
предоставляет опцию sanitize или позволяет использовать
внешние библиотеки вроде DOMPurify. Современная версия
Marked рекомендует фильтровать HTML перед вставкой в DOM:
import DOMPurify from 'dompurify';
const dirtyHtml = marked(markdownText);
const cleanHtml = DOMPurify.sanitize(dirtyHtml);
Marked поддерживает асинхронное преобразование Markdown, что полезно при работе с кастомными функциями:
const renderer = new marked.Renderer();
renderer.code = async (code, language) => {
const highlighted = await highlightCodeAsync(code, language);
return `<pre><code class="hljs ${language}">${highlighted}</code></pre>`;
};
const htmlAsync = await marked.parse(markdownText, { renderer });
Это позволяет интегрировать подсветку синтаксиса или другие асинхронные операции при генерации HTML.
gfm: поддержка GitHub Flavored Markdown (по умолчанию
true).breaks: перенос строк после каждого перевода строки
(true превращает одиночные переводы строки в
<br>).headerIds: генерировать id для заголовков,
полезно для создания якорей (true по умолчанию).Пример:
const htmlWithOptions = marked(markdownText, {
gfm: true,
breaks: true,
headerIds: true
});
В первом примере работы с Marked видно, что библиотека:
Эти базовые возможности закладывают фундамент для дальнейшей работы с более сложными документами и интеграции с веб-приложениями.