Parcel активно использует систему кэширования для ускорения повторных сборок. При первой компиляции создаётся набор промежуточных артефактов: трансформированные модули, результаты резолвинга зависимостей, оптимизированные бандлы. Эти данные сохраняются на диске и повторно используются при следующих запусках сборщика, если исходные файлы не изменились.
Кэш в Parcel расположен в служебной директории проекта (обычно
.parcel-cache). Внутри содержатся сериализованные
результаты трансформаций, метаданные графа зависимостей и
оптимизационные данные. Такой подход позволяет значительно сокращать
время сборки, особенно в крупных проектах с большим количеством модулей
и сложной цепочкой плагинов.
При изменении исходного кода Parcel определяет затронутые узлы графа зависимостей и пересобирает только их. Остальные части проекта остаются неизменными и подгружаются из кэша. Это поведение делает систему инкрементальной сборки одной из ключевых характеристик инструмента.
Несмотря на устойчивость механизма, кэш может становиться источником неконсистентного поведения сборки. На практике это проявляется в следующих сценариях:
В подобных случаях Parcel может продолжать использовать устаревшие артефакты, что приводит к расхождению между исходным кодом и итоговым бандлом.
--no-cache и его роль в процессе сборкиФлаг --no-cache отключает использование кэшированных
данных при выполнении команды сборки. В этом режиме Parcel игнорирует
содержимое .parcel-cache и выполняет полную пересборку
проекта с нуля.
Основная логика работы в этом режиме:
Такой режим приводит к увеличению времени сборки, но гарантирует отсутствие влияния устаревших данных.
При использовании --no-cache процесс сборки приобретает
характер полной компиляции:
Отсутствие чтения кэша означает, что каждый шаг выполняется заново, независимо от предыдущих запусков.
Важно учитывать, что даже при отключённом кэше Parcel может создавать новые кэшированные данные после завершения сборки, если не используется дополнительное отключение записи.
--no-cacheПолная пересборка без использования кэша применяется в ситуациях, где требуется гарантированная чистота результата:
В системах непрерывной интеграции кэширование может приводить к расхождениям между агентами, поэтому принудительная очистка часто используется как способ унификации поведения сборки.
Флаг применяется в стандартной команде сборки Parcel:
parcel build src/index.html --no-cache
или при запуске dev-сервера:
parcel serve src/index.html --no-cache
В обоих случаях отключается использование ранее сохранённых данных, что приводит к полной переработке проекта.
Полное отключение кэша существенно влияет на время выполнения сборки. В проектах с небольшим количеством модулей разница может быть незначительной, однако в крупных приложениях с сотнями или тысячами файлов увеличение времени сборки становится заметным.
Основные факторы роста времени:
При этом увеличивается предсказуемость результата, так как исключается влияние сохранённых артефактов.
.parcel-cacheФлаг --no-cache влияет на чтение кэша, но не всегда
означает его полное игнорирование на уровне файловой системы. В
зависимости от версии Parcel и конфигурации:
.parcel-cache может продолжать
обновлятьсяДля полного сброса состояния обычно комбинируется использование флага и удаления каталога кэша вручную:
rm -rf .parcel-cache
parcel build src/index.html --no-cache
Parcel использует плагины для обработки различных типов файлов. При включённом кэше результаты работы таких плагинов могут переиспользоваться без повторного вызова.
При использовании --no-cache:
Это особенно важно при разработке собственных плагинов, где поведение может зависеть от состояния внешних данных.
В монорепозиториях кэш Parcel может содержать пересечения между пакетами. При изменении общей конфигурации или зависимостей одного пакета могут возникать эффекты каскадного устаревания.
Использование --no-cache в таких структурах:
Однако стоимость пересборки в монорепозиториях возрастает кратно числу пакетов.
Отключение кэша часто используется как инструмент диагностики. Сравнение поведения сборки с включённым и выключенным кэшем позволяет выявить:
Если проблема исчезает при --no-cache, источник почти
всегда связан с некорректным кэшированием или неверной инвалидацией
графа зависимостей.
Флаг --no-cache может использоваться совместно с другими
параметрами, влияющими на сборку:
--dist-dir для изменения директории выхода--log-level для расширенной диагностики--no-optimize для отключения оптимизаций--target для различий между браузерной и серверной
сборкойКомбинация этих параметров позволяет получить полностью воспроизводимую сборку без влияния промежуточных артефактов.
При переходе между версиями Parcel структура кэша может изменяться.
Старые данные становятся несовместимыми с новой схемой сериализации. В
таких случаях --no-cache предотвращает попытки чтения
устаревших структур и снижает вероятность ошибок и падений сборки.
Часто обновление сопровождается полной очисткой
.parcel-cache, однако даже без ручного удаления флаг
обеспечивает безопасный обход устаревших данных.
Кэширование в Parcel является ключевым механизмом ускорения, однако его влияние на воспроизводимость результатов требует контроля. Принудительное отключение кэша выступает инструментом устранения неопределённости, возникающей из-за накопленных артефактов и изменений в окружении.
Поведение сборки в режиме --no-cache максимально
приближено к первичной компиляции проекта, что делает его полезным в
контексте контроля целостности сборочного процесса и выявления скрытых
проблем конфигурации.