Parcel чаще всего используется не как отдельный CLI-инструмент, а как
часть стандартного набора npm-скриптов в package.json.
Такой подход позволяет унифицировать команды запуска, сборки и
разработки в одном месте и сделать процесс воспроизводимым на любой
машине без глобальных установок.
Основная идея интеграции заключается в том, что Parcel вызывается
через npm run, yarn run или
pnpm run, а его параметры передаются напрямую через
командную строку или конфигурацию скриптов.
Типичный проект с Parcel опирается на несколько стандартных скриптов:
{
"name": "parcel-app",
"version": "1.0.0",
"scripts": {
"dev": "parcel src/index.html",
"build": "parcel build src/index.html",
"serve": "parcel serve src/index.html"
},
"devDependencies": {
"parcel": "^2.0.0"
}
}
Здесь видно три ключевых сценария:
Parcel автоматически определяет режим работы по команде
build или отсутствию флага.
Parcel устанавливается локально в проект, после чего вызывается через npm-скрипты без глобальной установки:
npm install -D parcel
Запуск напрямую возможен через npx:
npx parcel src/index.html
Однако использование npx считается вторичным по
отношению к npm run, поскольку npm-скрипты обеспечивают
единый слой абстракции и позволяют комбинировать команды.
Parcel CLI поддерживает передачу параметров, которые могут быть встроены прямо в скрипт:
{
"scripts": {
"dev": "parcel src/index.html --port 1234 --open",
"build": "parcel build src/index.html --dist-dir build"
}
}
Основные параметры, используемые в npm-скриптах:
--port — порт локального сервера--open — автоматическое открытие браузера--dist-dir — директория для production-сборки--public-url — базовый URL для ресурсов--log-level — уровень логированияТакой подход позволяет фиксировать конфигурацию сборки внутри репозитория без внешних конфигурационных файлов.
Parcel автоматически переключает режимы в зависимости от команды
build. Однако в npm-скриптах часто добавляется явное
разделение логики:
{
"scripts": {
"dev": "parcel src/index.html --source-maps",
"build": "parcel build src/index.html --no-source-maps --minify"
}
}
Особенности разделения:
Parcel самостоятельно оптимизирует production-сборку, но CLI-флаги позволяют дополнительно управлять поведением.
npm-скрипты могут передавать несколько entry-файлов:
{
"scripts": {
"dev": "parcel src/index.html src/admin.html",
"build": "parcel build src/index.html src/admin.html"
}
}
Parcel строит отдельные графы зависимостей для каждого entry point, создавая независимые бандлы.
Для управления конфигурацией через npm-скрипты часто используется передача переменных окружения.
{
"scripts": {
"dev": "cross-env NODE_ENV=development parcel src/index.html",
"build": "cross-env NODE_ENV=production parcel build src/index.html"
}
}
cross-env обеспечивает единый синтаксис для Windows,
Linux и macOS.
Parcel автоматически учитывает NODE_ENV, но явное
объявление переменной позволяет использовать её в пользовательском
коде.
npm поддерживает цепочки скриптов, которые позволяют расширять процесс сборки:
{
"scripts": {
"prebuild": "rimraf dist",
"build": "parcel build src/index.html",
"postbuild": "node scripts/report.js"
}
}
Логика выполнения:
prebuild — выполняется до сборкиbuild — основной процесс Parcelpostbuild — выполняется после завершенияТакой механизм часто используется для очистки директорий, генерации отчётов и постобработки ассетов.
Parcel не требует обязательной очистки output-директории, но в npm-скриптах часто добавляется отдельная команда:
{
"scripts": {
"clean": "rimraf dist",
"build": "npm run clean && parcel build src/index.html"
}
}
Это предотвращает накопление устаревших файлов при изменении структуры проекта.
Хотя Parcel имеет встроенный watch, его часто комбинируют с npm-скриптами для дополнительных задач:
{
"scripts": {
"watch": "parcel watch src/index.html",
"dev": "npm run watch"
}
}
Watch-режим:
В крупных проектах npm-скрипты используются как слой абстракции над Parcel:
{
"scripts": {
"start": "parcel src/index.html",
"dev": "npm run start",
"prod": "npm run build",
"build": "parcel build src/index.html"
}
}
Это позволяет:
В монорепозиториях Parcel часто вызывается из корневых npm-скриптов:
{
"workspaces": ["packages/*"],
"scripts": {
"dev": "npm run dev -w packages/app",
"build": "npm run build -w packages/app"
}
}
Особенности:
Parcel поддерживает TypeScript и Babel без дополнительной настройки, но npm-скрипты часто включают вспомогательные шаги:
{
"scripts": {
"typecheck": "tsc --noEmit",
"dev": "npm run typecheck && parcel src/index.html"
}
}
Такая схема позволяет отделить:
Parcel использует файловый кэш автоматически, но npm-скрипты могут влиять на его поведение через очистку:
{
"scripts": {
"rebuild": "rimraf .parcel-cache dist && parcel build src/index.html"
}
}
Очистка кэша применяется при:
В сложных сценариях Parcel запускается параллельно с другими процессами:
{
"scripts": {
"dev": "npm-run-all --parallel dev:*",
"dev:parcel": "parcel src/index.html",
"dev:server": "node server.js"
}
}
Такой подход позволяет одновременно:
В архитектурном смысле npm-скрипты становятся уровнем управления сборкой:
Такая модель делает сборку декларативной и переносимой между окружениями без изменения кода проекта.