Работа с 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);