Запуск dev-сервера: parcel serve

Назначение dev-сервера в Parcel

Dev-сервер в Parcel предназначен для локальной разработки с автоматической пересборкой проекта при изменениях исходного кода. Он обеспечивает быстрый цикл разработки за счёт инкрементальной сборки, кэширования и встроенной поддержки Hot Module Replacement (HMR).

Основная команда для запуска:

parcel serve index.html

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


Базовый принцип работы parcel serve

При запуске dev-сервера Parcel выполняет несколько ключевых этапов:

  1. Анализ входного файла (HTML, JS, TS и др.)
  2. Построение графа зависимостей
  3. Кэширование модулей для ускорения последующих сборок
  4. Запуск HTTP-сервера
  5. Подключение системы наблюдения за файлами
  6. Включение HMR для обновления модулей без перезагрузки страницы

Parcel ориентирован на минимальную конфигурацию: отсутствует необходимость вручную задавать конфиги для большинства сценариев.


Синтаксис команды

Общий формат

parcel serve <entry-file>

Пример запуска

parcel serve src/index.html

Если проект содержит HTML-файл как точку входа, Parcel автоматически подтягивает все связанные ресурсы: JavaScript, CSS, изображения и шрифты.


Поведение без явного serve

В Parcel v2 возможен упрощённый запуск:

parcel index.html

В этом случае Parcel автоматически включает режим разработки и поднимает dev-сервер. Команда serve делает поведение более явным и используется в скриптах и CI-окружениях.


Основные возможности dev-сервера

Горячая перезагрузка (HMR)

Parcel реализует Hot Module Replacement без дополнительной конфигурации. Изменения в модулях применяются без полной перезагрузки страницы.

Ключевые особенности:

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

Кэширование

Parcel использует файловый кэш .parcel-cache, который ускоряет повторные сборки:

  • хранение результатов трансформации модулей
  • повторное использование неизменённых зависимостей
  • ускорение старта dev-сервера

Автоматическое определение портов

По умолчанию используется порт:

http://localhost:1234

Если порт занят, Parcel автоматически выбирает следующий доступный.


Поддержка разных типов входных файлов

Dev-сервер работает не только с HTML:

  • JavaScript / TypeScript
  • CSS / SCSS / Less
  • изображения (png, jpg, svg)
  • JSON
  • Web Workers
  • WASM

Parcel строит единый граф зависимостей независимо от типа ресурсов.


Настройки запуска

Указание порта

parcel serve index.html --port 3000

Фиксирует порт dev-сервера, что полезно для интеграции с внешними инструментами.


Отключение HMR

parcel serve index.html --no-hmr

В этом режиме изменения приводят к полной перезагрузке страницы.


Очистка кэша при запуске

parcel serve index.html --no-cache

Используется при отладке проблем сборки или конфликтов зависимостей.


Отключение открывания браузера

parcel serve index.html --no-open

Parcel по умолчанию может автоматически открывать браузер при старте сервера.


Структура проекта при запуске

Типичная структура:

project/
├── src/
│   ├── index.html
│   ├── index.js
│   └── styles.css
├── package.json
└── .parcel-cache/

После запуска parcel serve дополнительно формируются:

  • директория кэша .parcel-cache
  • временные артефакты сборки
  • внутренние модули HMR runtime

Интеграция с package.json

Часто dev-сервер подключается через npm-скрипты:

{
  "scripts": {
    "dev": "parcel serve src/index.html"
  }
}

Запуск:

npm run dev

Это обеспечивает единообразный способ старта проекта в разных средах.


Работа с HTML как точкой входа

HTML-файл выступает центральной точкой графа зависимостей:

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="./styles.css">
  </head>
  <body>
    <script type="module" src="./index.js"></script>
  </body>
</html>

Parcel:

  • анализирует <script> и <link>
  • подтягивает модули
  • обрабатывает относительные пути
  • заменяет их на внутренние ссылки dev-сервера

Hot Module Replacement на уровне модулей

HMR работает через runtime-слой Parcel, который внедряется в приложение.

Поведение:

  • при изменении JS-модуля обновляется только этот модуль
  • CSS обновляется без перерендера страницы
  • при невозможности точечного обновления выполняется fallback на reload

Логика обновления зависимостей

При изменении файла Parcel:

  1. фиксирует изменение через file watcher
  2. пересобирает затронутый модуль
  3. проверяет затронутые зависимости
  4. отправляет обновление клиенту через WebSocket
  5. применяет обновление в браузере

Отличие dev-сервера от production сборки

Dev-сервер:

  • не минифицирует код
  • использует source maps
  • оптимизирован для скорости
  • включает HMR

Production сборка:

parcel build index.html
  • минимизация
  • tree-shaking
  • оптимизация ассетов
  • отсутствие HMR

Отладка запуска сервера

Частые сценарии диагностики:

Проблемы с портом

Причины:

  • занятый порт
  • параллельный процесс Parcel

Решение через указание другого порта:

parcel serve index.html --port 8080

Ошибки кэша

Симптомы:

  • устаревшие изменения
  • некорректная сборка

Решение:

parcel serve index.html --no-cache

Проблемы HMR

Причины:

  • несовместимость модулей
  • ошибки синтаксиса
  • некорректные side effects

Parcel автоматически выводит диагностические сообщения в консоль браузера и терминал.


Поведение сервера при изменениях файлов

Parcel использует событийную модель наблюдения:

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

Сервер не пересобирает проект полностью без необходимости.


Использование HTTPS в dev-сервере

Parcel поддерживает HTTPS-режим:

parcel serve index.html --https

Используется для сценариев, где требуется тестирование API, завязанных на защищённое соединение.


Производительность dev-сервера

Оптимизации включают:

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

Эти механизмы обеспечивают быстрый отклик даже при больших проектах.


Поведение при множественных entry points

Parcel поддерживает несколько точек входа:

parcel serve page1.html page2.html

Каждый HTML-файл становится отдельным приложением внутри одного dev-сервера с независимым графом зависимостей.


Внутренние процессы запуска

При старте parcel serve выполняются этапы:

  • инициализация конфигурации проекта
  • создание watcher-системы
  • загрузка плагинов трансформации
  • подготовка middleware HTTP-сервера
  • запуск WebSocket канала для HMR
  • первичная сборка entry points

Обработка ошибок во время разработки

Parcel не останавливает dev-сервер при ошибках сборки. Вместо этого:

  • ошибки выводятся в консоль
  • отображаются в браузере поверх приложения
  • HMR приостанавливается до исправления

Такой подход позволяет сохранять непрерывность работы сервера.