Библиотека Marked представляет собой высокопроизводительный Markdown-парсер для JavaScript. Для её использования достаточно установить пакет через npm:
npm install marked
Подключение в проекте выглядит так:
import { marked } from 'marked';
После подключения библиотека готова к использованию для преобразования Markdown в HTML.
Основной метод библиотеки — функция marked(). Она
принимает строку Markdown и возвращает HTML.
const markdownString = "# Заголовок\n\nТекст с **жирным** выделением.";
const htmlString = marked(markdownString);
console.log(htmlString);
Ключевые моменты:
Marked позволяет изменять поведение парсера через объекты
options и кастомные рендереры.
marked.setOptions({
gfm: true, // Включает GitHub Flavored Markdown
breaks: true, // Переводит переносы строк в <br>
smartLists: true, // Умные списки
smartypants: true // Замена прямых кавычек на типографские
});
Создание кастомного рендерера:
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>`;
}
};
marked.use({ renderer });
Это позволяет детально контролировать HTML-вывод для каждой части Markdown.
Частой причиной некорректного HTML является ошибка в исходном Markdown. Для диагностики:
marked.lexer() для получения токенов:const tokens = marked.lexer(markdownString);
console.log(tokens);
Кастомный рендерер позволяет вставлять логирование на каждом этапе:
const loggingRenderer = {
paragraph(text) {
console.log("Рендеринг параграфа:", text);
return `<p>${text}</p>`;
}
};
marked.use({ renderer: loggingRenderer });
Так можно отследить, какие блоки Markdown вызывают проблемы с HTML.
Для контроля специфики рендеринга можно использовать опцию
mangle и headerIds:
marked.setOptions({
mangle: false, // отключает автоматическую замену email-символов
headerIds: false // отключает генерацию id для заголовков
});
Эти параметры часто становятся причиной неожиданных изменений в HTML, особенно при автоматическом создании якорей для заголовков.
Если Markdown корректно рендерится в Node.js, но не отображается в браузере:
innerHTML.Создание набора тестовых Markdown-файлов помогает выявить узкие места парсера:
<table> и <img> с
корректными атрибутами.marked.lexer() для
выявления структуры Markdown.Использование этих методов позволяет выявлять и исправлять проблемы на уровне исходного текста, параметров библиотеки и интеграции с фронтендом.