Библиотека Marked является мощным инструментом для преобразования Markdown в HTML. Она обеспечивает быстрый и гибкий парсинг, позволяя управлять поведением обработки Markdown на уровне токенов и рендеринга.
Пример базового использования:
import { marked } from 'marked';
const markdownString = "# Заголовок\n\nТекст с **жирным** выделением.";
const html = marked(markdownString);
console.log(html);
В результате парсинга получится корректный HTML, где
# Заголовок преобразуется в <h1>, а
**жирным** в <strong>.
Marked разделяет Markdown на блоки (block-level elements) и инлайн-элементы (inline-level elements).
Пример различия:
const inlineExample = marked.parseInline("Текст с [ссылкой](https://example.com)");
console.log(inlineExample);
// Выдаст: Текст с <a href="https://example.com">ссылкой</a>
parseInline обрабатывает только содержимое строки, не
затрагивая блочные элементы.
Marked позволяет создавать кастомные рендереры через класс
Renderer или объект с функциями. Это даёт полный контроль
над тем, как преобразуются Markdown-теги в HTML.
const renderer = {
heading(text, level) {
return `<h${level} class="custom-heading">${text}</h${level}>`;
},
link(href, title, text) {
return `<a href="${href}" title="${title || ''}" target="_blank">${text}</a>`;
}
};
const htmlCustom = marked("## Пример заголовка\n[Ссылка](https://example.com)", { renderer });
console.log(htmlCustom);
Особенности:
rel и т.д.Marked поддерживает множество настроек, которые напрямую влияют на поведение парсинга:
<br>.Пример использования:
const markdownGFM = `
- [x] Сделано
- [ ] В процессе
`;
const htmlGFM = marked(markdownGFM, { gfm: true });
console.log(htmlGFM);
Включение gfm: true превращает чекбоксы в интерактивные
элементы <input type="checkbox">.
Marked позволяет получать токены Markdown перед рендерингом, что даёт возможность тонко анализировать и модифицировать содержимое.
const tokens = marked.lexer("# Заголовок\nТекст с **жирным** выделением.");
console.log(tokens);
Токены представляют собой объекты с ключами:
type – тип элемента (heading,
paragraph, list).depth – уровень заголовка.text – содержимое элемента.tokens – вложенные inline-токены для блока.Применение токенов удобно для создания собственных рендереров или анализа Markdown перед генерацией HTML.
Marked по умолчанию может обрабатывать встроенный HTML. Настройки:
Пример:
const htmlWithHtml = marked("<div>Прямой HTML</div>\n\n# Заголовок", { smartypants: true });
console.log(htmlWithHtml);
HTML-теги сохраняются в output, при этом Markdown-преобразования применяются корректно.
Поддержка подсветки синтаксиса возможна через опцию
highlight, которая принимает функцию.
import hljs from 'highlight.js';
marked.setOptions({
highlight: function(code, lang) {
return hljs.highlight(code, { language: lang }).value;
}
});
const codeMarkdown = "```js\nconsole.log('Hello');\n```";
console.log(marked(codeMarkdown));
Особенности:
Эта система позволяет использовать Marked не просто как конвертер Markdown, а как полноценный инструмент для построения кастомных Markdown-рендереров с точным контролем поведения на каждом уровне парсинга.