Markdown-it — это современная, расширяемая библиотека для парсинга Markdown в JavaScript. Она преобразует текст в HTML, сохраняя структуру документа, поддерживает плагины и настраиваемую обработку. Основные возможности включают поддержку CommonMark, расширенные синтаксисы и возможность добавления пользовательских правил.
Для работы с Markdown-it в проекте на Node.js используется npm или yarn:
npm install markdown-it
Или
yarn add markdown-it
После установки библиотеку можно подключить в коде:
const MarkdownIt = require('markdown-it');
const md = new MarkdownIt();
Для использования в браузере доступна версия через CDN:
<script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script>
const md = window.markdownit();
</script>
Создание HTML из Markdown выполняется через метод
render:
const markdown = '# Заголовок\n\nТекст с **жирным** выделением.';
const html = md.render(markdown);
console.log(html);
Результат:
<h1>Заголовок</h1>
<p>Текст с <strong>жирным</strong> выделением.</p>
Для однострочного Markdown используется renderInline,
которая не добавляет обёртку <p>:
const inlineHtml = md.renderInline('Текст с *курсивом*');
console.log(inlineHtml);
Конструктор MarkdownIt принимает объект конфигурации:
const md = new MarkdownIt({
html: true, // Разрешает HTML-теги в тексте
xhtmlOut: false, // Генерирует XHTML вместо HTML
breaks: true, // Переносы строк как <br>
linkify: true, // Автоматическая конвертация ссылок
typographer: true // Замена стандартных символов на типографские
});
Ключевые параметры:
html — управление безопасностью и вставкой HTML.breaks — полезно для блогов и комментариев, где важны
переносы.linkify — автоматически превращает URL в ссылки
<a>.typographer — преобразует кавычки, тире, многоточия в
красивые HTML-сущности.Markdown-it имеет богатый экосистемный слой плагинов. Примеры:
const markdownItAnchor = require('markdown-it-anchor');
md.use(markdownItAnchor, { permalink: true, level: [1,2,3] });
:smile: в символы Unicode.Для подключения плагина используется метод use с
опциями.
Markdown-it позволяет переопределять существующие правила или добавлять новые через renderer и parser rules. Пример добавления кастомного синтаксиса:
md.inline.ruler.after('emphasis', 'highlight', function(state, silent) {
const start = state.pos;
if (state.src[start] !== '^') return false;
let match = state.src.slice(start + 1).match(/([^^]+)\^/);
if (!match) return false;
if (!silent) {
const token = state.push('highlight', 'mark', 0);
token.content = match[1];
}
state.pos += match[0].length + 1;
return true;
});
md.renderer.rules.highlight = function(tokens, idx) {
return `<mark>${tokens[idx].content}</mark>`;
};
После этого запись ^выделение^ превращается в HTML
<mark>выделение</mark>.
При использовании Markdown-it в проектах с Webpack, часто применяют следующие подходы:
Лоадер markdown:
npm install raw-loader --save-dev
В webpack.config.js:
module.exports = {
module: {
rules: [
{
test: /\.md$/,
use: 'raw-loader'
}
]
}
};
После чего Markdown-файлы импортируются как строки:
import readme from './README.md';
const html = md.render(readme);Плагины для преобразования при сборке — позволяют генерировать HTML-страницы прямо из Markdown на этапе сборки.
Tree-shaking — подключение только необходимых функций Markdown-it снижает размер итогового бандла.
Markdown-it предоставляет базовые возможности обработки HTML, но при необходимости защиты от XSS рекомендуется использовать DOMPurify или sanitize-html:
const DOMPurify = require('dompurify')(window);
const cleanHtml = DOMPurify.sanitize(md.render(markdown));
Это позволяет безопасно отображать пользовательский Markdown без угроз безопасности.
Markdown-it сочетает высокую скорость работы с гибкой настройкой, позволяя создавать как простые блоги, так и сложные документационные системы с пользовательскими расширениями и безопасным HTML.