Remark и Rehype — это мощные инструменты для обработки Markdown и HTML в экосистеме JavaScript. Они позволяют создавать гибкие конвейеры трансформации контента, но реальная сила этих библиотек проявляется при интеграции с современными сборщиками, такими как Webpack, Vite и Rollup. Ниже рассмотрены ключевые подходы к интеграции и примеры конфигураций.
Для работы Remark/Rehype с Webpack используется концепция загрузчиков
(loaders). Основной принцип заключается в том, чтобы Markdown-файлы
обрабатывались через remark и/или rehype, а
результат превращался в JavaScript-модули.
Установка необходимых пакетов:
npm install remark remark-html rehype rehype-stringify webpack markdown-loader
Пример конфигурации webpack.config.js:
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.md$/,
use: [
{
loader: 'markdown-loader',
options: {
// Конфигурация Remark
pedantic: true,
// Возможность подключения плагинов Remark/Rehype
remarkPlugins: [require('remark-slug')],
rehypePlugins: [require('rehype-highlight')],
},
},
],
},
],
},
};
Особенности:
remark-slug) или подсветку синтаксиса кода
(rehype-highlight).Vite использует концепцию плагинов для расширения функционала сборки.
Для интеграции Remark/Rehype создается кастомный плагин или используется
готовый, например vite-plugin-md.
Установка:
npm install vite vite-plugin-md remark remark-html rehype rehype-stringify
Пример настройки vite.config.js:
import { defineConfig } from 'vite';
import mdPlugin from 'vite-plugin-md';
import remarkSlug from 'remark-slug';
import rehypeHighlight from 'rehype-highlight';
export default defineConfig({
plugins: [
mdPlugin({
markdownItOptions: {
html: true,
},
remarkPlugins: [remarkSlug],
rehypePlugins: [rehypeHighlight],
}),
],
});
Особенности:
Rollup также поддерживает работу с Remark/Rehype через плагины и загрузчики. Основная цель — преобразование Markdown в HTML или в JavaScript-модули для дальнейшей работы с ними.
Установка:
npm install rollup @rollup/plugin-commonjs @rollup/plugin-node-resolve rollup-plugin-md remark remark-html rehype rehype-stringify
Пример конфигурации rollup.config.js:
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import md from 'rollup-plugin-md';
import remarkSlug from 'remark-slug';
import rehypeHighlight from 'rehype-highlight';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
},
plugins: [
resolve(),
commonjs(),
md({
remarkPlugins: [remarkSlug],
rehypePlugins: [rehypeHighlight],
}),
],
};
Особенности:
rollup-plugin-md, что делает интеграцию гибкой и
расширяемой.vite-plugin-md или Webpack с
markdown-loader, так как поддерживается импорт Markdown как
компонентов.remark-gfm,
remark-toc) и Rehype
(rehype-autolink-headings) улучшает функциональность без
изменения сборщика.Markdown-файлы можно типизировать при использовании сборщиков:
declare module '*.md' {
const content: string;
export default content;
}
cache
объект при повторной сборке.Если требуется, можно составить подробную таблицу сравнения подходов интеграции с Webpack, Vite и Rollup, включая поддержку плагинов, производительность и типизацию. Это позволит выбрать оптимальный стек для конкретного проекта.