Reporter в Parcel отвечает за формирование и вывод всей информации о процессе сборки: прогресс, ошибки, предупреждения, структуру бандлов, статистику и дополнительные диагностические данные. Это слой, который отделяет внутреннюю работу сборщика от способа отображения результата в терминале, CI-системах или внешних инструментах.
Система reporter построена как независимый слой поверх графа сборки. В процессе выполнения Parcel генерирует события (build events), которые затем передаются в один или несколько репортеров.
Ключевая идея заключается в разделении:
Такой подход позволяет подключать разные формы представления без изменения логики сборки.
По умолчанию используется CLI reporter, который выводит информацию в терминал.
Он отображает:
Пример типичного вывода:
✨ Built in 1.32s
dist/index.js 120 KB
dist/vendor.js 540 KB
Важная особенность CLI reporter — потоковый вывод. Информация обновляется по мере изменения состояния сборки, а не только в конце.
Reporter отображает внутренние стадии пайплайна:
Каждый этап может сопровождаться прогресс-баром или текстовыми статусами. В режиме watch обновления происходят инкрементально, что позволяет отслеживать изменения почти в реальном времени.
Система диагностики интегрирована в reporter и включает три основных уровня:
Ошибки останавливают сборку и всегда выводятся с контекстом:
Пример:
@parcel/core: Cannot resolve 'react' from './App.js'
Warnings не прерывают сборку, но сигнализируют о потенциальных проблемах:
Используются для уведомлений о внутренних решениях сборщика:
Parcel поддерживает более детализированный вывод, который активируется через настройки или CLI-флаги.
В расширенном режиме reporter может отображать:
Это особенно важно для анализа производительности и оптимизации сборки.
JSON reporter используется для интеграции с внешними инструментами:
Вывод структурирован и содержит:
Пример структуры:
{
"type": "buildSuccess",
"buildTime": 1320,
"assets": [
{
"name": "index.js",
"size": 120000
}
]
}
JSON reporter важен для автоматизации, так как исключает необходимость парсинга текстового вывода.
Parcel позволяет использовать несколько reporters одновременно.
Например:
Конфигурация может выглядеть следующим образом:
{
"reporters": [
"default",
"parcel-reporter-json"
]
}
Каждый reporter получает одинаковый поток событий, но форматирует их независимо.
Система расширения reporter построена на событиях.
Custom reporter может подписываться на:
Базовая структура плагина:
export default {
report({ event }) {
if (event.type === 'buildSuccess') {
console.log('Сборка завершена');
}
}
};
В более сложных сценариях reporter может:
Reporter предоставляет детальную информацию о выходных файлах:
Эти данные позволяют анализировать:
В режиме watch reporter обновляет только изменившиеся части:
Это снижает шум в выводе и ускоряет анализ изменений.
Сообщения часто выглядят как diff-обновления, а не полный повтор всей информации.
Reporter спроектирован так, чтобы минимально влиять на скорость сборки.
Основные принципы:
При использовании JSON reporter накладные расходы ниже, чем у текстового, из-за отсутствия форматирования строк.
В CI важна стабильность и предсказуемость вывода.
Reporter в таких сценариях:
Это позволяет корректно сохранять логи в системах вроде GitHub Actions или GitLab CI.
В основе лежит поток событий, где каждое событие имеет:
Такая модель позволяет:
Диагностика, передаваемая reporter, включает:
Это делает сообщения не просто информативными, а пригодными для автоматической обработки IDE и инструментами разработчика.