Библиотеки Remark и Rehype активно развиваются, и с каждым крупным обновлением появляются breaking changes — изменения, которые нарушают обратную совместимость. Их неправильная обработка может привести к поломке существующих парсеров, плагинов и конвейеров обработки Markdown или HTML.
Breaking changes можно разделить на несколько категорий:
Изменение API функций
string, теперь Node).Изменение структуры AST
Обновление зависимостей
1. Чтение changelog и миграционных гайдлайнов
rehype-highlight
изменил способ передачи опций.2. Использование TypeScript и типизации
@types/unist и @types/mdast.3. Изоляция кода через плагины
processor.use(plugin) позволяет
подключать плагины с опцией backward-compatible.4. Написание тестов на AST
5. Логирование и мониторинг
Изменение структуры узлов в Remark:
Раньше узлы code имели поля:
{
type: 'code',
lang: 'js',
value: 'console.log("Hello")'
}
В новой версии поле meta стало обязательным:
{
type: 'code',
lang: 'js',
value: 'console.log("Hello")',
meta: null
}
Без добавления meta TypeScript выдаст ошибку, а плагин
форматирования сломается.
Переход на Rehype 12:
rehype-stringify() принимал объект с опцией
closeSelfClosing.tightSelfClosing.processor.use(rehypeStringify, { closeSelfClosing: true });
processor.use(rehypeStringify, { tightSelfClosing: true });
Без изменений HTML-вывод может быть некорректным.
Фиксировать версии библиотек в package.json
^ и ~)
иногда приводит к неожиданным breaking changes."remark": "14.0.2".Пошаговое обновление
Использование адаптеров и обёрток
Документирование изменений в проекте
unist-util-visit и
unist-util-visit-parents Позволяют безопасно
обходить AST без привязки к конкретной структуре узлов.
remark-lint и
rehype-lint Помогают выявлять устаревшие
конструкции Markdown/HTML.
remark-rehype Позволяет корректно
конвертировать между MDAST и HAST, минимизируя проблемы с
несовместимостью узлов.
Тестовые фикстуры Наборы Markdown и HTML с разнообразными структурами, которые проверяются после обновления библиотек.
Обработка breaking changes в Remark и Rehype требует системного подхода, включающего: изучение changelog, использование типизации, написание тестов, логирование AST, и поэтапное обновление зависимостей. Такой подход снижает риск поломки обработки Markdown/HTML и обеспечивает стабильность разработки при миграции на новые версии библиотек.