Пресеты плагинов — это заранее сконфигурированные наборы плагинов, которые упрощают настройку обработки Markdown или HTML. Они позволяют объединять несколько плагинов в единый блок конфигурации, что особенно полезно при сложной цепочке трансформаций и при работе над крупными проектами. Пресеты помогают стандартизировать обработку документов, уменьшая количество повторяющегося кода и повышая читаемость конфигурации.
Пресет представляет собой объект или функцию, которая возвращает массив плагинов с их конфигурациями. В Remark и Rehype пресет может быть подключен так же, как обычный плагин, что позволяет использовать его совместно с другими плагинами.
Пример структуры пресета:
// my-preset.js
module.exports = function myPreset(options = {}) {
return [
[require('remark-plugin-1'), { optionA: options.optionA }],
[require('remark-plugin-2'), { optionB: options.optionB }],
require('remark-plugin-3')
];
};
В этом примере myPreset возвращает массив из трёх
плагинов, два из которых получают конфигурацию через объект
options. Такой подход позволяет создавать гибкие пресеты,
где параметры можно задавать при инициализации.
После создания пресета его можно подключить в конфигурации Remark
через метод .use().
const remark = require('remark');
const myPreset = require('./my-preset');
remark()
.use(myPreset, { optionA: true, optionB: 'value' })
.process('# Заголовок', function(err, file) {
if (err) throw err;
console.log(String(file));
});
Здесь
.use(myPreset, { optionA: true, optionB: 'value' })
подключает пресет и передаёт в него параметры. Remark автоматически
развернёт массив плагинов, возвращаемый пресетом, и применит их по
очереди.
Remark и Rehype поддерживают смешанное использование пресетов и отдельных плагинов. Это позволяет строить иерархию конфигураций: базовый пресет может быть расширен дополнительными плагинами.
remark()
.use(myPreset, { optionA: false })
.use(require('remark-plugin-4'), { optionC: 123 })
.process('# Текст для обработки');
Плагины из пресета выполняются в порядке, указанном в массиве, после
чего подключается отдельный плагин remark-plugin-4.
Для масштабируемых проектов часто создаются пресеты, которые можно
использовать и в Remark, и в Rehype, если плагины поддерживают оба
движка. Универсальный пресет строится как функция, принимающая объект
options и возвращающая массив плагинов с
конфигурациями.
function universalPreset({ enablePluginA = true, enablePluginB = false } = {}) {
const plugins = [];
if (enablePluginA) plugins.push(require('plugin-a'));
if (enablePluginB) plugins.push(require('plugin-b'));
return plugins;
}
Такой подход позволяет включать только необходимые плагины, не загромождая процессинг ненужными шагами.
Для Rehype пресеты работают аналогично Remark, но применяются к дереву HTML. Основная разница в типах плагинов: Rehype использует плагины для работы с HTML-узлами, тогда как Remark работает с Markdown-узлами.
Пример пресета для Rehype:
// rehype-preset.js
module.exports = function rehypePreset(options = {}) {
return [
[require('rehype-plugin-1'), { setting: options.setting }],
require('rehype-plugin-2')
];
};
Подключение пресета в Rehype:
const rehype = require('rehype');
const rehypePreset = require('./rehype-preset');
rehype()
.use(rehypePreset, { setting: true })
.process('<h1>Заголовок</h1>', function(err, file) {
if (err) throw err;
console.log(String(file));
});
options позволяет настраивать пресет без изменения
исходного кода.[plugin, options],
чтобы легко видеть, какие настройки применяются к каждому плагину.Пресеты становятся не просто инструментом для упрощения конфигурации, а частью архитектуры проекта, формируя единый подход к обработке Markdown и HTML.