Обработка Markdown в Node.js: библиотеки marked, showdown и remarkable

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Markdown в Node.js: библиотеки для парсинга и конвертации

Markdown — это легкий язык разметки, широко используемый для форматирования текста в документации, README-файлах, блогах и системах управления контентом. В экосистеме Node.js существует несколько мощных библиотек, которые позволяют парсить Markdown и преобразовывать его в HTML, а также выполнять обратную операцию. В этой статье мы рассмотрим три наиболее популярных инструмента: marked, showdown и remarkable, их особенности, API и примеры использования.

1. Библиотека marked

marked — это быстрый и легковесный парсер Markdown, который поддерживает все основные элементы синтаксиса (заголовки, списки, ссылки, изображения, код, таблицы и т.д.). Он отличается высокой производительностью и простотой настройки.

Установка

npm install marked

Базовое использование

Для конвертации Markdown-строки в HTML достаточно вызвать функцию marked():

const marked = require('marked');

const markdownText = `
# Привет, мир!

Это **жирный текст** и *курсив*.

- Элемент списка 1
- Элемент списка 2

[Ссылка на PythonLib](https://pythonlib.ru)
`;

const html = marked(markdownText);
console.log(html);

Результат выполнения:

<h1>Привет, мир!</h1>
<p>Это <strong>жирный текст</strong> и <em>курсив</em>.</p>
<ul>
<li>Элемент списка 1</li>
<li>Элемент списка 2</li>
</ul>
<p><a href="https://pythonlib.ru">Ссылка на PythonLib</a></p>

Настройка опций

marked поддерживает множество опций для кастомизации вывода:

const marked = require('marked');

marked.setOptions({
  breaks: true,       // преобразовывать переносы строк в <br>
  gfm: true,          // включить GitHub Flavored Markdown (таблицы, зачеркивание и т.д.)
  headerIds: false,   // не добавлять ID к заголовкам
  mangle: false,      // не экранировать email-адреса
  sanitize: false     // не удалять HTML-теги (опасно, используйте с осторожностью)
});

const html = marked('Строка 1\nСтрока 2');
console.log(html); // Выведет с <br> между строками

Синхронное и асинхронное использование

По умолчанию marked() работает синхронно, но поддерживает и асинхронный режим через промисы:

const marked = require('marked');

async function convertMarkdown(text) {
  const html = await marked.parse(text);
  return html;
}

convertMarkdown('# Заголовок').then(console.log);

2. Библиотека showdown

showdown — это еще один популярный парсер Markdown, который может работать как в браузере, так и в Node.js. Он предоставляет расширяемый API и поддерживает множество расширений.

Установка

npm install showdown

Базовое использование

Создайте экземпляр конвертера и вызовите метод makeHtml():

const showdown = require('showdown');
const converter = new showdown.Converter();

const markdownText = '## Подзаголовок\n\nОбычный текст с **выделением**.';
const html = converter.makeHtml(markdownText);
console.log(html);

Результат:

<h2>Подзаголовок</h2>
<p>Обычный текст с <strong>выделением</strong>.</p>

Расширения и кастомизация

showdown позволяет добавлять собственные расширения, например, для поддержки смайликов или LaTeX-формул:

const showdown = require('showdown');

// Создаем расширение для замены :smile: на эмодзи
const emojiExtension = function() {
  return [{
    type: 'lang',
    regex: /:smile:/g,
    replace: '😊'
  }];
};

const converter = new showdown.Converter({ extensions: [emojiExtension] });
const html = converter.makeHtml('Привет :smile:!');
console.log(html); // <p>Привет 😊!</p>

Обратная конвертация (HTML в Markdown)

Showdown также поддерживает обратное преобразование — из HTML в Markdown:

const showdown = require('showdown');
const converter = new showdown.Converter();

const htmlText =                    

Рекомендаций