Remark и Rehype — это библиотеки для обработки Markdown и HTML в JavaScript, широко используемые для генерации статического контента, документации и блогов. Деплой таких проектов требует понимания нескольких ключевых аспектов: сборки контента, преобразования в конечный HTML, настройки серверной инфраструктуры и хостинга.
Типичный проект на Remark/Rehype включает следующие компоненты:
.md или
.mdx, которые содержат основной контент.remark-parse, remark-rehype,
remark-slug).rehype-stringify,
rehype-highlight).Для деплоя важно, чтобы структура проекта позволяла легко собирать
HTML и статические ресурсы в одну папку (обычно dist или
build), готовую к публикации.
Сборка Markdown в HTML осуществляется по следующей схеме:
Чтение файлов Markdown Используются стандартные
модули Node.js, такие как fs и path, либо
утилиты вроде fast-glob для поиска всех файлов.
Обработка через Remark Remark-плагины
применяются к Markdown-дереву (mdast) для:
remark-slug).remark-prism).remark-toc).Конвертация в HTML через Rehype Remark предоставляет возможность передачи AST (дерева) в Rehype для дальнейшей обработки HTML. На этом этапе можно:
rehype-add-classes).rehype-minify).rehype-meta).Генерация финального HTML Rehype-дерево
сериализуется в строку HTML с помощью rehype-stringify и
сохраняется в папку сборки.
Пример сборки на Node.js:
import fs from 'fs';
import path from 'path';
import { unified } from 'unified';
import remarkParse from 'remark-parse';
import remarkRehype from 'remark-rehype';
import rehypeStringify from 'rehype-stringify';
const inputFile = './content/article.md';
const outputFile = './dist/article.html';
const markdown = fs.readFileSync(inputFile, 'utf-8');
unified()
.use(remarkParse)
.use(remarkRehype)
.use(rehypeStringify)
.process(markdown)
.then(file => {
fs.writeFileSync(outputFile, String(file));
});
После сборки проекта в статический HTML его можно разместить на различных платформах. Основные варианты:
Vercel Автоматическая сборка проектов Node.js и
статических сайтов. Достаточно подключить репозиторий, указать команду
сборки (node build.js) и папку вывода
(dist).
Netlify Поддерживает статические файлы. Команда
сборки и папка вывода настраиваются в интерфейсе или через
netlify.toml.
GitHub Pages Простой вариант для статических
сайтов. HTML-файлы можно выгружать в ветку gh-pages через
gh-pages npm-пакет.
Самостоятельный VPS На VPS или сервере можно использовать Nginx или Apache для отдачи статического HTML. Важно настроить правильные пути и кеширование для оптимизации скорости.
Для автоматического деплоя после обновления контента или кода рекомендуется использовать CI/CD:
GitHub Actions
push или pull_request.dist или на GitHub Pages.GitLab CI/CD
.gitlab-ci.yml описывает стадии сборки и деплоя.node_modules для ускорения
сборки.Vercel/Netlify автоматические билды
Для больших проектов рекомендуется:
rehype-minify и
cssnano).Хотя Remark и Rehype ориентированы на статический контент, можно интегрировать динамические элементы через: