Create React App (CRA) представляет собой преднастроенный инструмент сборки на основе Webpack с ограниченной возможностью прямого изменения конфигурации без eject. Parcel, в свою очередь, является сборщиком с нулевой конфигурацией, ориентированным на автоматическое определение зависимостей и минимизацию ручной настройки.
Ключевое различие заключается в подходе к конфигурации:
В контексте миграции это приводит к необходимости пересмотра структуры проекта, точек входа и механизмов обработки ассетов.
В CRA типичная структура включает src/index.js как точку
входа и публичную директорию public с шаблоном HTML. Parcel
требует явного указания HTML как точки входа, от которой строится граф
зависимостей.
Изменяется принцип организации:
<script type="module">Типовая структура после перехода:
project/
src/
index.js
App.js
styles.css
index.html
package.json
Удаление CRA-зависимостей и установка Parcel выполняется через замену
react-scripts на parcel.
Основные изменения в зависимостях:
react-scriptsparcelreact, react-domParcel автоматически поддерживает большинство современных форматов без дополнительной конфигурации.
В CRA точка входа фиксирована и скрыта внутри
react-scripts. В Parcel точка входа определяется через
HTML-файл.
HTML становится центром связки модулей:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Application</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="./src/index.js"></script>
</body>
</html>
JavaScript начинает выполняться как ESModule, что влияет на:
CRA использует react-scripts start, build,
test. Parcel использует собственные CLI-команды.
Конфигурация package.json изменяется следующим
образом:
start заменяется на parcel index.htmlbuild заменяется на
parcel build index.html--dist-dir при необходимости
управления выходной директориейParcel автоматически включает:
CRA использует Webpack loaders для CSS, PostCSS и Sass. Parcel интегрирует обработку стилей без явного описания loaders.
Изменяется способ подключения:
Пример подключения:
import './styles.css';
Parcel анализирует импорт и включает файл в граф сборки без дополнительной конфигурации.
CRA использует REACT_APP_* через встроенный механизм
dotenv. Parcel использует стандартный механизм .env с
автоматической подстановкой через процесс сборки.
Изменения:
.env файл остаетсяprocess.envВ CRA статические ресурсы размещаются в public. Parcel
использует более гибкую модель:
Пример:
import logo from './assets/logo.png';
Parcel преобразует импорт в URL ресурса в финальной сборке.
CRA включает Jest по умолчанию. Parcel не навязывает тестовый стек.
В результате миграции происходит:
react-scripts testТестовая инфраструктура перестает быть связанной с системой сборки.
CRA поддерживает TypeScript через встроенную конфигурацию. Parcel поддерживает TypeScript нативно.
Особенности:
tsconfig.json сохраняетсяФайлы .ts и .tsx начинают обрабатываться
автоматически после установки Parcel.
CRA использует Webpack Dev Server. Parcel использует встроенный dev server с HMR.
Характеристики Parcel:
В CRA production-сборка запускается через
react-scripts build. Parcel использует команду
parcel build.
Особенности production-сборки Parcel:
Выходная структура становится плоской и оптимизированной под статический хостинг.
CRA требует настройки alias через Webpack или CRACO. Parcel
поддерживает alias через package.json или конфигурационные
файлы.
Пример:
{
"alias": {
"@components": "./src/components"
}
}
Разрешение модулей становится частью стандартного процесса сборки без дополнительного слоя конфигурации.
React в CRA интегрирован через react-scripts. В Parcel
React подключается как обычная зависимость.
Изменения:
При миграции наблюдаются системные различия, влияющие на поведение приложения:
CRA использует поле proxy в package.json.
Parcel не предоставляет встроенный аналог, поэтому проксирование
реализуется через:
Изменяется уровень абстракции между фронтендом и backend-запросами.