Для работы с библиотекой Marked в Node.js её необходимо установить через npm:
npm install marked
После установки библиотеку подключают стандартным способом:
const marked = require('marked');
В браузерной среде можно использовать CDN:
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
Marked предоставляет возможность преобразовывать Markdown в HTML с
высокой производительностью. Основная функция —
marked():
const markdownString = '# Заголовок 1\n\nТекст параграфа';
const html = marked(markdownString);
console.log(html);
Результат:
<h1>Заголовок 1</h1>
<p>Текст параграфа</p>
Для обработки файлов используется модуль fs Node.js.
Пример чтения файла Markdown и преобразования его в HTML:
const fs = require('fs');
const marked = require('marked');
fs.readFile('example.md', 'utf8', (err, data) => {
if (err) throw err;
const htmlContent = marked(data);
fs.writeFile('example.html', htmlContent, (err) => {
if (err) throw err;
console.log('Файл example.html успешно создан.');
});
});
Ключевые моменты:
fs.readFile позволяет загружать Markdown-файл.marked(data) выполняет парсинг Markdown в HTML.fs.writeFile сохраняет результат в HTML-файл.Marked поддерживает кастомизацию через объект настроек. Примеры часто используемых параметров:
marked.setOptions({
gfm: true, // Поддержка GitHub Flavored Markdown
breaks: true, // Переводы строк интерпретируются как <br>
headerIds: true, // Добавление id к заголовкам
mangle: false, // Отключение искажения email-адресов
});
Можно также использовать пользовательский рендерер:
const renderer = new marked.Renderer();
renderer.link = function(href, title, text) {
return `<a href="${href}" title="${title || ''}" target="_blank">${text}</a>`;
};
const html = marked(markdownString, { renderer });
Это позволяет полностью контролировать итоговый HTML для ссылок, изображений, заголовков и других элементов.
Для больших файлов удобно использовать потоковое чтение и запись:
const fs = require('fs');
const marked = require('marked');
const readStream = fs.createReadStream('large.md', 'utf8');
const writeStream = fs.createWriteStream('large.html');
let markdownBuffer = '';
readStream.on('data', chunk => {
markdownBuffer += chunk;
});
readStream.on('end', () => {
const html = marked(markdownBuffer);
writeStream.write(html);
});
Такой подход минимизирует использование памяти и позволяет обрабатывать очень большие Markdown-документы.
Marked поддерживает асинхронный рендеринг с использованием промисов:
const fs = require('fs/promises');
const { marked } = require('marked');
async function convertFile(input, output) {
const data = await fs.readFile(input, 'utf8');
const html = await marked.parse(data);
await fs.writeFile(output, html);
}
convertFile('example.md', 'example.html');
Преимущество: упрощает интеграцию с современными асинхронными цепочками и уменьшает вероятность блокировки потоков ввода-вывода.
Markdown, обработанный Marked, можно вставлять в HTML-шаблоны с помощью таких движков, как EJS, Pug или Handlebars:
const ejs = require('ejs');
const marked = require('marked');
const fs = require('fs');
const markdown = fs.readFileSync('article.md', 'utf8');
const htmlContent = marked(markdown);
const template = fs.readFileSync('template.ejs', 'utf8');
const finalHtml = ejs.render(template, { content: htmlContent });
fs.writeFileSync('output.html', finalHtml);
Это позволяет объединять Markdown-документы с динамическими страницами и шаблонами.
Для использования Marked в браузере:
<textarea id="markdown"></textarea>
<div id="preview"></div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script>
const textarea = document.getElementById('markdown');
const preview = document.getElementById('preview');
textarea.addEventListener('input', () => {
preview.innerHTML = marked.parse(textarea.value);
});
</script>
Ключевые моменты:
marked.parse() для рендеринга
Markdown в HTML.При выводе пользовательского Markdown важно учитывать XSS-атаки. Marked позволяет использовать библиотеку DOMPurify для очистки HTML:
const DOMPurify = require('dompurify')(window);
const cleanHtml = DOMPurify.sanitize(marked.parse(userInputMarkdown));
Это предотвращает внедрение вредоносного кода через теги
<script> и другие потенциально опасные элементы.
marked().Библиотека Marked обеспечивает гибкий и мощный способ преобразования Markdown в HTML, который подходит как для серверных сценариев с Node.js, так и для интерактивных веб-интерфейсов.