Parcel как сборщик модулей изначально позиционировался как инструмент
с минимальной конфигурацией и высокой скоростью работы «из коробки».
Однако между первой и второй версией произошёл фундаментальный пересмотр
архитектуры, который затронул не только производительность, но и модель
расширяемости, обработку ассетов и внутренний pipeline.
Общая концепция эволюции
Parcel v1 был создан как монолитный сборщик с жёстко встроенной
логикой обработки типов файлов. Его ключевая идея заключалась в том,
чтобы пользователь не писал конфигурацию: достаточно указать входной
файл, и система автоматически строила граф зависимостей.
Parcel v2 переосмысливает этот подход и переходит к модульной
архитектуре на основе плагинов. При этом сохраняется принцип
zero-config, но внутренняя реализация становится значительно более
гибкой.
Ключевое отличие:
- v1 — монолитный pipeline с фиксированными трансформерами
- v2 — плагинная система с явно определёнными этапами обработки
Архитектура сборки
Parcel v1: фиксированный
конвейер
В первой версии сборка представляла собой последовательность
этапов:
- Поиск зависимостей
- Трансформация через встроенные трансформеры
- Бандлинг
- Запись результата на диск
Каждый тип файла (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 ориентирован на максимальную автоматизацию без
участия разработчика. Во второй версии сохраняется автоматизация, но
добавляется принцип управляемой модульности: инструмент остаётся простым
по умолчанию, но становится глубоко настраиваемым при необходимости.
Основной сдвиг заключается в переходе от «сборщик делает всё сам» к
«сборщик предоставляет среду для сборки».