Версии Parcel: отличия v1 и v2

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


Общая концепция эволюции

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

Parcel v2 переосмысливает этот подход и переходит к модульной архитектуре на основе плагинов. При этом сохраняется принцип zero-config, но внутренняя реализация становится значительно более гибкой.

Ключевое отличие:

  • v1 — монолитный pipeline с фиксированными трансформерами
  • v2 — плагинная система с явно определёнными этапами обработки

Архитектура сборки

Parcel v1: фиксированный конвейер

В первой версии сборка представляла собой последовательность этапов:

  1. Поиск зависимостей
  2. Трансформация через встроенные трансформеры
  3. Бандлинг
  4. Запись результата на диск

Каждый тип файла (JS, CSS, изображения) обрабатывался встроенными трансформерами. Добавление нового формата требовало вмешательства в ядро или использования ограниченных API.

Особенность v1: логика обработки типов файлов была жёстко зашита в core.


Parcel v2: pipeline на основе плагинов

Во второй версии вводится многоуровневая система:

  • Resolver (разрешение модулей)
  • Transformer (трансформация кода)
  • Bundler (группировка модулей)
  • Packager (формирование итогового артефакта)

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

Ключевая особенность v2: каждый этап — это независимый слой с API.


Система плагинов

Parcel v1

Плагинная система в v1 существовала, но была ограниченной:

  • слабая документированность
  • отсутствие строгих контрактов
  • частичная интеграция с core
  • ограниченные точки расширения

Фактически плагины чаще выступали как «хуки» в существующий процесс, а не полноценные участники pipeline.


Parcel v2

Во второй версии система плагинов становится центральной частью архитектуры.

Вводятся:

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

Каждый плагин работает в рамках определённого слоя:

  • Resolver plugin
  • Transformer plugin
  • Bundler plugin
  • Namer plugin
  • Packager plugin

Важное изменение: теперь Parcel фактически представляет собой runtime для плагинов.


Производительность и кеширование

Parcel v1

Кеширование в первой версии было относительно простым:

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

Проблемы:

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

Parcel v2

Во второй версии кеширование переработано полностью:

  • многослойный кеш (FS cache + in-memory cache)
  • детальная гранулярность (до уровня AST-узлов)
  • переиспользование результатов на уровне трансформеров
  • инкрементальная пересборка

Ключевое улучшение: большинство операций становятся кэшируемыми независимо от остального pipeline.


Поддержка языков и ассетов

Parcel v1

Поддержка типов файлов была встроенной:

  • JavaScript (ES5/ES6 через Babel)
  • CSS и препроцессоры
  • изображения (inline или file reference)
  • HTML как entry point

Добавление нового типа файла было затруднено.


Parcel v2

Поддержка типов файлов становится расширяемой через transformer plugins:

  • TypeScript как отдельный трансформер
  • WebAssembly как полноценный модуль
  • поддержка новых CSS-диалектов через плагины
  • кастомные форматы данных

Фундаментальное отличие: Parcel больше не «знает» о типах файлов заранее.


Система резолвинга модулей

Parcel v1

Резолвинг зависимостей был встроен и следовал Node.js-подобной логике:

  • поддержка node_modules
  • относительные пути
  • alias через конфигурацию

Гибкость была ограниченной.


Parcel v2

Появляется отдельный слой resolver plugins:

  • возможность кастомного алгоритма поиска модулей
  • поддержка виртуальных модулей
  • интеграция с monorepo системами
  • расширяемый aliasing

Изменение концепции: резолвинг становится заменяемым компонентом.


Бандлинг и код-сплиттинг

Parcel v1

Бандлинг происходил автоматически:

  • один или несколько entry points
  • автоматический code splitting
  • ограниченный контроль над графом бандлов

Parcel v2

Бандлинг становится более предсказуемым и управляемым:

  • явное разделение на bundles
  • улучшенный алгоритм tree-shaking
  • более точный анализ зависимостей
  • оптимизация shared dependencies

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


Конфигурация проекта

Parcel v1

Основной принцип:

  • отсутствие конфигурации
  • минимальный .parcelrc (опционально)
  • автоматическое определение окружения

Недостаток проявлялся в сложных проектах, где требовалась тонкая настройка.


Parcel v2

Появляется полноценная конфигурационная модель:

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

Баланс: сохраняется zero-config режим, но добавляется глубокая кастомизация.


Работа с development server

Parcel v1

Dev server был встроенным:

  • hot reload
  • автоматическая пересборка
  • базовая поддержка HMR

Ограничения:

  • менее стабильный HMR
  • отсутствие глубокого контроля обновлений модулей

Parcel v2

Dev server переработан:

  • улучшенный HMR runtime
  • более точная инвалидация модулей
  • ускоренный rebuild благодаря кешу
  • стабильная работа с React, Vue и другими фреймворками

Обработка ошибок и диагностика

Parcel v1

Ошибки часто были:

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

Parcel v2

Система диагностики расширена:

  • подробные stack traces
  • указание стадии pipeline
  • контекст AST-трансформаций
  • улучшенные сообщения о конфликте модулей

Расширяемость и экосистема

Parcel v1

Экосистема была ограниченной:

  • небольшое количество плагинов
  • слабая стандартизация API
  • зависимость от core реализации

Parcel v2

Экосистема становится полноценной:

  • стабильный plugin API
  • независимые пакеты трансформеров
  • возможность создания кастомных bundler-поведения
  • активное развитие community plugins

Сравнение ключевых характеристик

Parcel v1:

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

Parcel v2:

  • модульная plugin-based архитектура
  • строгие API слои
  • расширяемый pipeline
  • улучшенное кеширование
  • высокая масштабируемость

Изменение философии инструмента

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

Основной сдвиг заключается в переходе от «сборщик делает всё сам» к «сборщик предоставляет среду для сборки».