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

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

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

Начать курс

Работа с Markdown в Node.js: обзор библиотек и инструментов

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

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

Marked — это одна из самых быстрых и лёгких библиотек для парсинга Markdown. Она не имеет внешних зависимостей и поддерживает CommonMark и GFM (GitHub Flavored Markdown).

Установка

npm install marked

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

const marked = require('marked');

const markdownString = '# Заголовок\nЭто **жирный** текст и *курсив*.\n\n- Пункт 1\n- Пункт 2';

const html = marked.parse(markdownString);
console.log(html);

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

<h1 id="заголовок">Заголовок</h1>
<p>Это <strong>жирный</strong> текст и <em>курсив</em>.</p>
<ul>
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>

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

Marked поддерживает множество опций для тонкой настройки парсинга:

const marked = require('marked');

marked.setOptions({
  breaks: true,       // перенос строк в <br>
  gfm: true,          // поддержка GFM
  headerIds: false    // отключить id у заголовков
});

const html = marked.parse('Строка 1\nСтрока 2');
console.log(html);
// <p>Строка 1<br>Строка 2</p>

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

Remarkable — это гибкая библиотека с поддержкой плагинов и расширений. Она позволяет подключать синтаксис для математических формул, диаграмм и других специфических элементов.

Установка

npm install remarkable

Пример использования

const { Remarkable } = require('remarkable');
const md = new Remarkable();

const markdown = '## Подзаголовок\n\n`code` и `inline code`';
const html = md.render(markdown);
console.log(html);

Вывод:

<h2>Подзаголовок</h2>
<p><code>code</code> и <code>inline code</code></p>

Плагины и расширения

Remarkable поддерживает плагины для обработки таблиц, списков задач и других элементов:

const { Remarkable } = require('remarkable');
const md = new Remarkable({
  html: true,
  linkify: true
});

// Добавление плагина для таблиц
md.renderer.rules.table_open = function() {
  return '<table class="table">\n';
};

const html = md.render('| Колонка 1 | Колонка 2 |\n|-----------|-----------|\n| Данные 1  | Данные 2  |');
console.log(html);

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

Showdown — это порт оригинального Showdown для JavaScript. Он прост в использовании и хорошо подходит для клиент-серверных приложений.

Установка

npm install showdown

Пример кода

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

const markdown = '**Жирный** и *курсив*';
const html = converter.makeHtml(markdown);
console.log(html);
// <p><strong>Жирный</strong> и <em>курсив</em></p>

Настройка расширений

Showdown поддерживает расширения, которые можно подключать для добавления новых возможностей:

const showdown = require('showdown');

// Создаём расширение для подсветки кода
const myExt = {
  type: 'output',
  regex: /<pre><code>/g,
  replace: '<pre><code class="language-javascript">'
};

const converter = new showdown.Converter({ extensions: [myExt] });
const html = converter.makeHtml('```javascript\nconsole.log("Hello");\n```');
console.log(html);

Сравнение библиотек

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