ESLint следует модели семантического версионирования (Semantic
Versioning, SemVer), где версия представляется в виде
MAJOR.MINOR.PATCH. Эта стратегия определяет предсказуемость
обновлений и управляет рисками совместимости в экосистеме линтинга
JavaScript-кода.
MAJOR-версия изменяется при внесении несовместимых изменений. MINOR-версия — при добавлении функциональности с обратной совместимостью. PATCH-версия — при исправлении ошибок без изменения публичного API.
Ключевая особенность ESLint заключается в том, что «публичным API» считается не только программный интерфейс, но и поведение правил, формат конфигурации, CLI-опции и контракт плагинов.
Версионирование ESLint распространяется на несколько независимых, но связанных слоёв:
eslint команда)ESLint class и Node.js API).eslintrc, flat config)Изменение любого из этих слоёв может приводить к увеличению MAJOR-версии, если нарушается обратная совместимость.
MAJOR-версии ESLint традиционно вводят архитектурные изменения, требующие адаптации конфигураций и плагинов.
Удаление устаревших правил
Изменение поведения правил
Изменение конфигурационного формата
.eslintrc к flat config стал одним из
крупнейших измененийОбновление API ядра
ESLintОбновления плагинного контракта
Одним из наиболее значимых шагов стало введение flat config, который существенно изменил стратегию совместимости.
Flat config:
.eslintrcextends)Переход на flat config стал причиной роста MAJOR-версии, так как затронул базовую модель конфигурации.
MINOR-версии ESLint используются для постепенного развития функциональности без нарушения существующих конфигураций.
Типичные изменения:
MINOR-релизы часто включают поддержку новых возможностей ECMAScript без изменения поведения существующих правил.
PATCH-версии ориентированы на стабильность. Они включают:
Особенность ESLint заключается в том, что даже небольшие изменения в правилах могут влиять на количество предупреждений, поэтому PATCH-релизы требуют аккуратного тестирования на больших кодовых базах.
Экосистема ESLint сильно зависит от плагинов, и стратегия версионирования здесь критична.
peerDependencies на ESLint^8 || ^9Типичная проблема:
Это создаёт эффект «версионного каскада», где стабильность проекта зависит от согласованности всей цепочки зависимостей.
Конфигурации ESLint чувствительны к версии ядра.
.eslintrc vs flat configextendsparserOptionsСтратегия миграции обычно включает:
ESLint использует поэтапную систему устаревания:
Такая стратегия снижает риск резких миграций, но требует регулярного отслеживания предупреждений в CI.
Каждое правило ESLint имеет собственный жизненный цикл внутри общей версии пакета.
Статусы правил:
Изменения правил часто являются скрытыми breaking changes, даже если версия ESLint не увеличивает MAJOR, поэтому анализ changelog критичен при обновлениях.
CLI ESLint рассматривается как стабильный интерфейс:
Node.js API (ESLint class) имеет более строгие гарантии
стабильности, так как используется в сборочных системах и CI/CD
пайплайнах.
В крупных кодовых базах стратегия обновления ESLint обычно включает:
Особое внимание уделяется:
Со временем ESLint перешёл от простого набора правил к сложной экосистеме, где версионирование стало инструментом управления совместимостью всей JavaScript-инфраструктуры.
Ключевые направления эволюции: