Разница между exit code 1 и 2

В процессе выполнения CLI-команд ESLint завершение процесса сопровождается числовым exit code, который фиксирует итог анализа исходного кода. Эти коды используются в CI/CD, pre-commit хуках и системах автоматизации для определения состояния проверки.

Основные значения:

  • 0 — ошибок не обнаружено
  • 1 — обнаружены ошибки линтинга
  • 2 — критическая ошибка выполнения ESLint

Exit code 1: ошибки линтинга

Exit code 1 возвращается в ситуации, когда анализ кода завершился корректно, но были найдены нарушения правил ESLint.

Характерные особенности:

  • процесс линтинга выполнен полностью
  • конфигурация ESLint валидна
  • парсинг файлов завершился успешно
  • обнаружены нарушения правил (error-уровня)

Типичный сценарий:

  • несоответствие правилам форматирования
  • использование запрещённых конструкций
  • нарушения архитектурных правил проекта

Пример поведения:

eslint src/

Результат:

/src/index.js
  10:5  error  'x' is defined but never used  no-unused-vars

✖ 1 problem (1 error, 0 warnings)

В этом случае процесс завершается с code 1, так как ESLint выполнился штатно, но код содержит ошибки.

Ключевая характеристика:

Exit code 1 означает: “анализ выполнен, но код не соответствует правилам”


Exit code 2: критическая ошибка выполнения

Exit code 2 указывает на ситуацию, при которой ESLint не смог корректно завершить работу из-за внутренней или конфигурационной ошибки.

Это принципиально отличается от code 1: анализ может быть неполным или вовсе не выполненным.

Типовые причины:

  • некорректный или повреждённый конфигурационный файл (.eslintrc)
  • использование несуществующих или несовместимых плагинов
  • ошибки загрузки модулей (например, отсутствующий eslint-plugin-*)
  • синтаксические ошибки в конфигурации
  • ошибки CLI-аргументов
  • невозможность прочитать файлы проекта

Пример ситуации:

eslint src/

Вывод:

Error: Failed to load plugin 'react' declared in '.eslintrc'

Итоговый exit code:

2

Ключевая характеристика:

Exit code 2 означает: “ESLint не смог выполниться корректно”


Сравнительная модель поведения

Разделение кодов 1 и 2 отражает два принципиально разных класса проблем:

Состояние Exit code Природа проблемы Стадия выполнения
Ошибки линтинга 1 Нарушения правил кода Анализ завершён
Критическая ошибка 2 Сбой конфигурации или окружения Анализ прерван

Поведение в CI/CD окружении

В системах автоматической сборки различие между кодами критично:

  • code 1 рассматривается как логическая ошибка кода
  • code 2 рассматривается как сбой инфраструктуры или конфигурации

При code 1 пайплайн обычно завершается неуспешно, но причина интерпретируется как качество кода.

При code 2 часто требуется вмешательство в конфигурацию ESLint, зависимости или окружение, так как анализ не был выполнен полностью.


Связь с процессом выполнения ESLint

Внутренний цикл работы ESLint можно условно разделить на этапы:

  1. загрузка конфигурации
  2. инициализация плагинов
  3. парсинг файлов
  4. применение правил
  5. формирование отчёта

Exit code 1 формируется на этапе 5 при наличии нарушений.

Exit code 2 может возникнуть уже на этапах 1–3 при невозможности продолжить выполнение.


Типовые источники exit code 2

На практике наиболее частые причины критического завершения:

  • отсутствие зависимостей после npm install
  • несовместимость версий ESLint и плагинов
  • использование ESM/CommonJS конфигураций без корректной настройки type: module
  • ошибки в путях extends или parser
  • попытка анализа файлов вне доступного scope

Логическая интерпретация кодов

Поведение ESLint в терминах exit code можно рассматривать как двухуровневую модель:

  • code 1 — результат анализа (quality gate)
  • code 2 — сбой системы анализа (execution failure)

Такое разделение позволяет отделять проблемы качества кода от проблем среды выполнения, что особенно важно при масштабных проектах и автоматизированных пайплайнах.