Библиотека Marked для JavaScript активно развивается, но при этом сохраняет механизмы обратной совместимости, что позволяет существующим проектам продолжать работать без существенных изменений при обновлении версии библиотеки. Разберём ключевые аспекты обратной совместимости в Marked.
Marked придерживается семантического версионирования (Semantic Versioning). Основные принципы:
Это позволяет разработчикам ориентироваться на стабильность методов и конфигураций, особенно при обновлении библиотеки.
Marked предоставляет следующие стабильные объекты и функции, которые сохраняются между минорными и патч-версиями:
marked.parse(markdownString, options) — основной метод
для преобразования Markdown в HTML.marked.Parser и marked.Lexer — классы для
более детального контроля процесса парсинга.marked.Renderer — объект для кастомизации
HTML-вывода.Использование этих интерфейсов гарантирует минимальный риск сломать существующий код при обновлении библиотеки.
Marked поддерживает стандартный синтаксис Markdown, но со временем добавляет новые возможности:
options.sanitize.С точки зрения обратной совместимости важно понимать, что новые токены игнорируются старым кодом, если они не включены в конфигурацию. Это предотвращает внезапное изменение поведения парсинга при обновлении.
Marked позволяет передавать объект конфигурации, который контролирует поведение парсера и рендерера:
const options = {
gfm: true,
breaks: false,
sanitize: false,
smartLists: true,
smartypants: false
};
const html = marked.parse(markdownString, options);
Marked поддерживает работу как в Node.js, так и в браузере. Для обратной совместимости:
require('marked') в Node.js
продолжает работать во всех новых версиях.window.marked при подключении через
<script> тег.import { marked } from 'marked') остаются
полностью совместимыми с предыдущими версиями, если не изменена мажорная
версия библиотеки.Одним из ключевых аспектов обратной совместимости является поддержка кастомных рендереров:
const renderer = new marked.Renderer();
renderer.link = function(href, title, text) {
return `<a href="${href}" target="_blank">${text}</a>`;
};
marked.use({ renderer });
Marked старается сохранять стабильность при изменениях:
lexer.tokens.Для минимизации рисков при обновлении Marked:
package.json,
чтобы исключить автоматические обновления мажорной версии.marked.use() для подключения
новых функций, не ломая существующие кастомизации.Благодаря такой архитектуре Marked позволяет развивать библиотеку и внедрять новые возможности без разрушения существующих проектов, обеспечивая плавный переход между версиями.