Принудительная очистка: --no-cache

Parcel активно использует систему кэширования для ускорения повторных сборок. При первой компиляции создаётся набор промежуточных артефактов: трансформированные модули, результаты резолвинга зависимостей, оптимизированные бандлы. Эти данные сохраняются на диске и повторно используются при следующих запусках сборщика, если исходные файлы не изменились.

Кэш в Parcel расположен в служебной директории проекта (обычно .parcel-cache). Внутри содержатся сериализованные результаты трансформаций, метаданные графа зависимостей и оптимизационные данные. Такой подход позволяет значительно сокращать время сборки, особенно в крупных проектах с большим количеством модулей и сложной цепочкой плагинов.

При изменении исходного кода Parcel определяет затронутые узлы графа зависимостей и пересобирает только их. Остальные части проекта остаются неизменными и подгружаются из кэша. Это поведение делает систему инкрементальной сборки одной из ключевых характеристик инструмента.


Причины некорректного поведения кэша

Несмотря на устойчивость механизма, кэш может становиться источником неконсистентного поведения сборки. На практике это проявляется в следующих сценариях:

  • изменения конфигурации без пересборки кэша
  • обновление версий плагинов или трансформеров
  • миграции между версиями Parcel
  • повреждение кэшированных данных
  • конфликт зависимостей в монорепозиториях
  • изменение окружения сборки (Node.js, переменные среды)

В подобных случаях Parcel может продолжать использовать устаревшие артефакты, что приводит к расхождению между исходным кодом и итоговым бандлом.


Флаг --no-cache и его роль в процессе сборки

Флаг --no-cache отключает использование кэшированных данных при выполнении команды сборки. В этом режиме Parcel игнорирует содержимое .parcel-cache и выполняет полную пересборку проекта с нуля.

Основная логика работы в этом режиме:

  • игнорирование ранее сохранённых трансформаций
  • повторное построение графа зависимостей
  • повторное выполнение всех трансформаций
  • генерация новых промежуточных артефактов без опоры на диск

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


Поведение Parcel при отключённом кэше

При использовании --no-cache процесс сборки приобретает характер полной компиляции:

  1. анализ входных точек проекта
  2. рекурсивное построение графа модулей
  3. применение трансформеров (Babel, PostCSS, TypeScript и других)
  4. бандлинг и оптимизация
  5. генерация выходных файлов

Отсутствие чтения кэша означает, что каждый шаг выполняется заново, независимо от предыдущих запусков.

Важно учитывать, что даже при отключённом кэше Parcel может создавать новые кэшированные данные после завершения сборки, если не используется дополнительное отключение записи.


Сценарии применения --no-cache

Полная пересборка без использования кэша применяется в ситуациях, где требуется гарантированная чистота результата:

  • отладка некорректных сборок
  • проверка влияния изменений конфигурации
  • диагностика ошибок плагинов
  • воспроизведение проблем, возникающих только в холодной сборке
  • тестирование обновлений Parcel или зависимостей
  • CI/CD процессы с требованиями детерминированного результата

В системах непрерывной интеграции кэширование может приводить к расхождениям между агентами, поэтому принудительная очистка часто используется как способ унификации поведения сборки.


Использование в CLI

Флаг применяется в стандартной команде сборки 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:

  • каждый плагин выполняется заново
  • пересчитываются результаты трансформаций AST
  • повторно применяются оптимизации и минификация
  • обновляются хеши выходных файлов

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


Особенности в монорепозиториях

В монорепозиториях кэш Parcel может содержать пересечения между пакетами. При изменении общей конфигурации или зависимостей одного пакета могут возникать эффекты каскадного устаревания.

Использование --no-cache в таких структурах:

  • устраняет влияние перекрёстного кэширования
  • заставляет пересобрать зависимости между пакетами
  • снижает вероятность конфликтов версий артефактов

Однако стоимость пересборки в монорепозиториях возрастает кратно числу пакетов.


Диагностика проблем с помощью полного пересчёта

Отключение кэша часто используется как инструмент диагностики. Сравнение поведения сборки с включённым и выключенным кэшем позволяет выявить:

  • некорректные зависимости
  • ошибки в плагинах трансформации
  • проблемы инвалидации файлов
  • расхождения между dev и production сборками

Если проблема исчезает при --no-cache, источник почти всегда связан с некорректным кэшированием или неверной инвалидацией графа зависимостей.


Сочетание с другими флагами Parcel

Флаг --no-cache может использоваться совместно с другими параметрами, влияющими на сборку:

  • --dist-dir для изменения директории выхода
  • --log-level для расширенной диагностики
  • --no-optimize для отключения оптимизаций
  • --target для различий между браузерной и серверной сборкой

Комбинация этих параметров позволяет получить полностью воспроизводимую сборку без влияния промежуточных артефактов.


Поведение при обновлениях Parcel

При переходе между версиями Parcel структура кэша может изменяться. Старые данные становятся несовместимыми с новой схемой сериализации. В таких случаях --no-cache предотвращает попытки чтения устаревших структур и снижает вероятность ошибок и падений сборки.

Часто обновление сопровождается полной очисткой .parcel-cache, однако даже без ручного удаления флаг обеспечивает безопасный обход устаревших данных.


Роль в стабильности сборочного процесса

Кэширование в Parcel является ключевым механизмом ускорения, однако его влияние на воспроизводимость результатов требует контроля. Принудительное отключение кэша выступает инструментом устранения неопределённости, возникающей из-за накопленных артефактов и изменений в окружении.

Поведение сборки в режиме --no-cache максимально приближено к первичной компиляции проекта, что делает его полезным в контексте контроля целостности сборочного процесса и выявления скрытых проблем конфигурации.