Для использования библиотеки Marked необходимо сначала её подключить.
В среде Node.js это делается через require или
import:
// CommonJS
const marked = require('marked');
// ES Modules
import { marked } from 'marked';
После подключения можно выполнять преобразование текста в Markdown в
HTML с помощью функции marked().
const markdownText = "# Заголовок 1\n\nТекст с **жирным** выделением.";
const html = marked(markdownText);
console.log(html);
В результате получится HTML:
<h1>Заголовок 1</h1>
<p>Текст с <strong>жирным</strong> выделением.</p>
Функция marked() принимает строку с Markdown и
возвращает HTML. На базовом уровне достаточно передать текст:
marked("# Пример заголовка\n\n* Список\n* Элемент 2");
Ключевой момент: Marked выполняет синхронное преобразование и возвращает готовую строку HTML.
Marked поддерживает объект настроек, который позволяет изменять поведение парсера:
const options = {
gfm: true, // Включение GitHub Flavored Markdown
breaks: true, // Перевод строк в <br>
headerIds: false, // Отключение автоматической генерации id для заголовков
mangle: false // Отключение маскировки email
};
const html = marked(markdownText, options);
Объяснение ключевых опций:
<br>.true, каждому
заголовку автоматически присваивается id.Marked позволяет работать не только с готовым HTML, но и с
промежуточными токенами. Для этого применяется функция
marked.lexer():
const tokens = marked.lexer("# Заголовок\n\nТекст с **выделением**");
console.log(tokens);
Результат — массив токенов, каждый из которых представляет отдельный элемент Markdown: заголовки, параграфы, списки, ссылки.
Дальнейшее преобразование токенов в HTML выполняется через
marked.parser():
const htmlFromTokens = marked.parser(tokens);
Преимущество токенизации: можно модифицировать токены перед генерацией HTML, например, добавлять классы, изменять содержимое или фильтровать элементы.
Marked поддерживает асинхронный вызов через опцию
async: true и callback-функцию. Это полезно, если в будущем
будет интеграция с асинхронными плагинами или загрузкой внешних
ресурсов:
marked(markdownText, { async: true }, (err, html) => {
if (err) throw err;
console.log(html);
});
Особенности:
Marked предоставляет возможность полностью контролировать HTML,
который генерируется для каждого типа элемента. Для этого создаётся
объект Renderer:
const renderer = new marked.Renderer();
renderer.heading = (text, level) => {
return `<h${level} class="custom-heading">${text}</h${level}>`;
};
const html = marked("# Пример", { renderer });
Особенности кастомизации:
Marked изначально поддерживает GFM, включая:
[ ] /
[x]Пример таблицы:
const markdownTable = `
| Заголовок 1 | Заголовок 2 |
| ----------- | ----------- |
| Ячейка 1 | Ячейка 2 |
`;
const htmlTable = marked(markdownTable);
Результат будет корректно преобразован в HTML
<table>.
marked(text) — синхронное преобразование Markdown в
HTML.marked(text, options) — преобразование с
настройками.marked.lexer(text) и marked.parser(tokens)
— работа с токенами для тонкой обработки.marked(text, { async: true }, callback) — асинхронный
режим.renderer — кастомизация HTML для любых элементов.Библиотека Marked обеспечивает гибкую основу для работы с Markdown: от простого преобразования текста до сложной кастомизации и асинхронной обработки больших объемов данных.