Библиотеки Remark и Rehype организованы по модульному принципу. Основной модуль выполняет базовую функциональность: парсинг и генерацию AST (Abstract Syntax Tree). Дополнительные возможности реализуются через плагины. Названия пакетов строго следуют соглашениям, обеспечивая предсказуемость и удобство поиска в экосистеме.
remark-parse,
remark-stringify.rehype-parse, rehype-stringify.remark-* или
rehype-*.Использование таких стандартов позволяет автоматически отличать плагины от ядра и минимизировать риск конфликтов имен.
Плагины для Remark и Rehype делятся на три категории по именам:
Парсеры (-parse) — преобразуют
текст в AST.
remark-parse — Markdown → MDAST.rehype-parse — HTML → HAST.Генераторы (-stringify) —
преобразуют AST обратно в текст.
remark-stringify — MDAST → Markdown.rehype-stringify — HAST → HTML.Трансформеры (-plugin или без
суффикса) — изменяют AST без изменения исходного формата.
remark-lint — проверка стиля Markdown.rehype-slug — добавление идентификаторов к заголовкам
HTML.Ключевое соглашение: имя плагина должно отражать его
функциональность. Любой разработчик, взглянув на пакет
remark-footnotes, сразу понимает, что плагин работает с
сносками в Markdown.
В экосистеме Remark/Rehype применяется kebab-case (с маленькими буквами, слова разделяются дефисом) для имен npm-пакетов. Примеры:
remark-autolink-headingsrehype-highlightВнутри кода, при экспорте функций или классов, допускается CamelCase для читаемости:
import { remark } from 'remark';
import AutolinkHeadings from 'remark-autolink-headings';
const processor = remark().use(AutolinkHeadings);
Такое разделение облегчает различие между именем пакета в npm и именем переменной в коде.
Все плагины должны начинаться с remark- или
rehype-. Это не только единообразие, но и предотвращение
конфликтов с другими пакетами.
Для организации плагинов внутри крупного проекта можно использовать дополнительный префикс, отражающий авторство или домен. Например:
@myorg/remark-custom-toc@myorg/rehype-custom-syntaxИспользование scoped packages
(@scope/package) помогает группировать плагины и выделять
их среди сторонних.
Remark и Rehype придерживаются семантического версионирования (semver):
Имя пакета вместе с версией играет ключевую роль для интеграции плагинов и предотвращения конфликта зависимостей.
Для локальных плагинов, которые не публикуются в npm, также рекомендуется придерживаться той же структуры:
remark-myplugin — плагин для Remark.rehype-myplugin — плагин для Rehype.Это сохраняет единообразие, облегчает поиск и поддержку кода даже в пределах одного проекта.
remark- для Markdown,
rehype- для HTML.parse,
stringify, lint, slug.@scope/remark-*.Эти соглашения обеспечивают предсказуемость, совместимость и удобство работы с экосистемой Remark и Rehype как для сторонних разработчиков, так и для команд поддержки проектов.