Базовый синтаксис вызова

Для использования библиотеки 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);

Объяснение ключевых опций:

  • gfm — включает расширения GitHub Markdown, такие как таблицы, списки с чекбоксами и поддержку URL.
  • breaks — переводит одиночные переносы строк в <br>.
  • headerIds — если true, каждому заголовку автоматически присваивается id.
  • mangle — используется для защиты email-адресов от спам-ботов.

Вызов с использованием токенизации

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 });

Особенности кастомизации:

  • Любой элемент Markdown может быть переопределён: параграфы, ссылки, изображения, списки.
  • Можно добавлять собственные классы, атрибуты или оборачивать элементы в контейнеры.

Поддержка GitHub Flavored Markdown

Marked изначально поддерживает GFM, включая:

  • Таблицы
  • Задачи в списках [ ] / [x]
  • Автоматическое преобразование URL в ссылки

Пример таблицы:

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: от простого преобразования текста до сложной кастомизации и асинхронной обработки больших объемов данных.