Remark и Rehype — это мощные библиотеки для работы с Markdown и HTML в экосистеме JavaScript. Одной из ключевых возможностей при работе с этими инструментами является создание виртуальных файлов, которые позволяют обрабатывать контент без необходимости сохранять его на диск. Виртуальные файлы обеспечивают гибкость, ускоряют обработку данных и упрощают интеграцию с другими инструментами.
В экосистеме unified (на которой построены Remark и Rehype) контент всегда представлен в виде VFile — виртуального файла. Это объект, содержащий:
Пример создания минимального виртуального файла:
import { VFile } from 'vfile';
const file = new VFile({
contents: '# Пример заголовка\nЭто текст в Markdown.',
path: 'example.md'
});
В этом случае file.contents содержит Markdown, а file.path задаёт виртуальный путь. Такой объект можно передавать в Remark для дальнейшей обработки.
Remark предоставляет API для работы с Markdown через цепочку
плагинов. Для обработки виртуальных файлов часто используют методы
process и processSync:
import { remark } from 'remark';
import remarkHtml from 'remark-html';
import { VFile } from 'vfile';
const markdownFile = new VFile({ contents: '# Заголовок\nПример текста' });
remark()
.use(remarkHtml)
.process(markdownFile)
.then((processedFile) => {
console.log(processedFile.toString());
});
Ключевые моменты:
process принимает объект
VFile.Для динамического генерации контента можно создавать виртуальные файлы программно, без исходных файлов на диске:
function createMarkdownFile(title, body) {
return new VFile({
contents: `# ${title}\n\n${body}`,
path: `${title.toLowerCase().replace(/\s+/g, '-')}.md`
});
}
const file = createMarkdownFile('Пример статьи', 'Содержимое статьи...');
Такой подход особенно полезен при генерации документации, блогов или при интеграции с системами CMS.
VFile поддерживает хранение метаданных и сообщений об ошибках:
const file = new VFile({
contents: 'Некорректный Markdown **текст',
path: 'bad.md'
});
// Добавление предупреждения
file.message('Отсутствует закрывающий символ для выделения', { line: 1, column: 22 });
// Доступ к сообщениям
console.log(file.messages);
Методы message, fail и warn
позволяют контролировать ошибки на этапе обработки Markdown или HTML.
Это особенно полезно при использовании в сборках документации, где важно
логирование проблем.
Для HTML-ориентированной обработки виртуальные файлы также используются с Rehype:
import { rehype } from 'rehype';
import rehypeStringify from 'rehype-stringify';
import { VFile } from 'vfile';
const htmlFile = new VFile({ contents: '<h1>Заголовок</h1><p>Текст</p>' });
rehype()
.use(rehypeStringify)
.process(htmlFile)
.then((processedFile) => {
console.log(processedFile.toString());
});
Rehype совместим с Markdown через Remark, что позволяет создавать цепочки обработки: Markdown → AST → HTML → виртуальный файл → финальная строка.
Виртуальные файлы являются фундаментальной частью работы с Remark и Rehype, обеспечивая безопасную, быструю и гибкую обработку контента без необходимости постоянного обращения к файловой системе. Это делает их незаменимыми при построении систем генерации документации, CMS, статических сайтов и любых динамических обработчиков Markdown/HTML.