Система ошибок и предупреждений в Rollup построена вокруг идеи строгой, но расширяемой диагностики, которая позволяет контролировать процесс сборки на разных уровнях: от синтаксического анализа входных модулей до генерации итогового бандла. Важная особенность заключается в том, что Rollup разделяет ошибки, приводящие к немедленной остановке сборки, и предупреждения, которые могут быть обработаны или проигнорированы в зависимости от конфигурации.
Критические ошибки полностью прерывают процесс сборки. Они возникают в ситуациях, когда дальнейшая работа невозможна или результат будет некорректным.
Основные источники критических ошибок:
Каждая ошибка представляется объектом, содержащим структурированную информацию:
message — текстовое описаниеcode — машинно-ориентированный идентификаторid — путь к модулю или плагинуframe — фрагмент кода с указанием позицииloc — координаты ошибки (строка и колонка)plugin — имя плагина, если ошибка произошла внутри
негоТакая структура позволяет не только логировать ошибку, но и строить пользовательские системы диагностики.
Предупреждения не останавливают сборку, но сигнализируют о
потенциальных проблемах. Rollup позволяет гибко управлять их обработкой
через хук onwarn.
Типичные причины предупреждений:
Предупреждение имеет структуру, аналогичную ошибке, но без обязательного выброса исключения.
Ошибки могут появляться на разных этапах пайплайна:
Парсинг (parsing) Преобразование исходного кода в AST. Здесь фиксируются синтаксические ошибки JavaScript и TypeScript (при использовании соответствующих плагинов).
Разрешение модулей (module resolution) Ошибки возникают при невозможности найти файл или пакет.
Трансформация (transform) Плагины могут модифицировать код и при этом выбрасывать исключения.
Сборка графа зависимостей (dependency graph) Ошибки циклов или некорректных ссылок.
Генерация бандла (generate/write) Проблемы при финальной эмиссии кода.
Rollup формирует стандартизированный объект ошибки, расширяющий
базовый Error.
Ключевые поля:
name — тип ошибки (обычно
RollupError)message — человекочитаемое описаниеcode — стабильный идентификаторstack — стек вызововplugin — источник ошибкиhook — стадия плагинного цикла (load,
transform, resolveId и т.д.)id — модуль, где произошла ошибкаloc — позиция в кодеframe — контекстный фрагмент кодаДополнительно могут присутствовать поля:
watchFiles — список файлов, связанных с ошибкойurl — ссылка на документациюpos — абсолютная позиция в файлеПри использовании rollup.rollup() ошибки выбрасываются
как исключения:
Пример поведения:
В режиме наблюдения (rollup.watch) обработка ошибок
отличается:
Основные события:
event: 'ERROR'event: 'END'event: 'FATAL'Разделение на ERROR и FATAL важно:
ERROR — локальная проблема сборкиFATAL — состояние, при котором watcher не может
продолжать работуonwarn позволяет перехватывать все предупреждения перед
их выводом:
export default {
onwarn(warning, warn) {
if (warning.code === 'CIRCULAR_DEPENDENCY') {
return;
}
warn(warning);
}
}
Если onwarn не задан:
Типичный сценарий обработки:
Важно учитывать, что подавление предупреждений не влияет на внутреннюю модель графа зависимостей.
Rollup использует стабильные строковые коды, которые позволяют программно анализировать причины сбоев.
Примеры категорий:
Ошибки разрешения модулей:
Ошибки синтаксиса:
Ошибки плагинов:
transformОшибки генерации:
Плагины могут:
this.error()this.warn()Разница принципиальная:
throw → немедленная остановкаthis.error() → структурированная ошибка Rollupthis.warn() → предупреждение без остановкиПри вызове this.error Rollup автоматически:
Это позволяет точно локализовать проблему даже в сложных цепочках трансформаций.
При включённых source maps Rollup:
locframe оригинальным кодомЭто особенно важно при использовании трансформирующих плагинов, таких как Babel или TypeScript, где итоговый код значительно отличается от исходного.
Некоторые ошибки могут быть подавлены:
onwarnПредупреждение может быть превращено в ошибку вручную:
warning.codethrow new ErrorWatcher добавляет дополнительный слой обработки:
Особенность заключается в том, что Rollup не кэширует ошибки как состояние — каждая пересборка рассматривается как независимая попытка.
Rollup использует структурированный формат вывода:
Типичный формат включает:
Ошибки Rollup часто интегрируются в:
Для этого используется:
code и stackRollup обрабатывает ошибки по принципу первой критической остановки:
В watch-режиме возможна серия независимых ошибок при каждом изменении файлов, но без их агрегации между итерациями сборки.