Parcel часто используется как CLI-инструмент, который легко встраивается в существующие системы автоматизации. Его ключевое преимущество в контексте Makefile и shell-скриптов заключается в том, что он не требует сложной конфигурации: большинство сценариев сборки можно выразить одной командой CLI, что делает его удобным для интеграции в классические Unix-инструменты.
В отличие от более тяжёлых систем сборки, Parcel ориентирован на быстрый запуск и минимальную настройку, что позволяет использовать его как «командный блок» внутри Makefile, Bash-скриптов и CI-конвейеров.
Makefile остаётся одним из самых простых способов описания задач сборки, особенно в проектах, где важно разделение этапов: установка зависимостей, сборка, тестирование, деплой.
Parcel легко интегрируется в такие сценарии благодаря предсказуемым CLI-командам.
install:
npm install
dev:
npx parcel src/index.html
build:
npx parcel build src/index.html
clean:
rm -rf dist .parcel-cache
Каждая цель соответствует отдельному этапу жизненного цикла проекта:
install — установка зависимостейdev — запуск dev-сервера Parcelbuild — production-сборкаclean — очистка артефактовParcel автоматически различает режимы через команды
serve и build, однако в Makefile часто
требуется явное управление параметрами:
dev:
NODE_ENV=development npx parcel src/index.html --open
build:
NODE_ENV=production npx parcel build src/index.html --dist-dir build --no-source-maps
Ключевые моменты:
NODE_ENV влияет на оптимизации--dist-dir задаёт выходную директорию--no-source-maps ускоряет production-сборкуДля разработки удобно использовать режим наблюдения:
watch:
npx parcel watch src/index.html
Однако Parcel в режиме serve уже включает
watch-поведение, поэтому в большинстве случаев достаточно:
dev:
npx parcel src/index.html --open
Makefile позволяет запускать Parcel вместе с другими инструментами:
dev:
npx concurrently \
"npx parcel src/index.html" \
"npx json-server db.json"
Такой подход часто используется для одновременного запуска:
Shell-скрипты обеспечивают более гибкое управление процессом сборки, чем Makefile, особенно когда требуется условная логика, обработка ошибок или динамическая конфигурация.
#!/bin/bash
set -e
echo "Установка зависимостей..."
npm install
echo "Очистка старой сборки..."
rm -rf dist .parcel-cache
echo "Сборка проекта..."
npx parcel build src/index.html --dist-dir dist
Ключевые элементы:
set -e прерывает выполнение при ошибкеParcel активно использует переменные окружения, которые удобно задавать в shell-скриптах.
#!/bin/bash
export NODE_ENV=production
export API_URL=https://api.example.com
npx parcel build src/index.html
Parcel автоматически прокидывает process.env в
клиентский код при наличии соответствующей конфигурации.
В shell-скриптах часто подключается .env:
#!/bin/bash
set -a
source .env
set +a
npx parcel src/index.html
Это позволяет централизовать конфигурацию без изменения кода сборки.
В production-скриптах важно контролировать поведение Parcel при ошибках.
#!/bin/bash
if ! npx parcel build src/index.html; then
echo "Ошибка сборки"
exit 1
fi
#!/bin/bash
log() {
echo "[BUILD] $1"
}
log "Очистка..."
rm -rf dist
log "Сборка Parcel"
npx parcel build src/index.html
log "Готово"
В CI-средах (GitHub Actions, GitLab CI, Jenkins) Parcel обычно запускается через shell-скрипты.
#!/bin/bash
set -e
npm ci
npx parcel build src/index.html \
--dist-dir dist \
--no-cache
Оптимизации:
npm ci ускоряет установку зависимостейset -e гарантирует остановку при
ошибкахParcel использует директорию .parcel-cache, которую
можно управлять вручную.
rm -rf .parcel-cache
clean-cache:
rm -rf .parcel-cache
В CI иногда применяется стратегия:
.parcel-cache между сборкамиShell-скрипты позволяют параметризовать Parcel.
#!/bin/bash
ENTRY=${1:-src/index.html}
npx parcel build "$ENTRY"
Запуск:
./build.sh src/admin.html
#!/bin/bash
MODE=$1
if [ "$MODE" = "dev" ]; then
npx parcel src/index.html --open
else
npx parcel build src/index.html
fi
Parcel часто используется в связке с npm scripts, но
Makefile и shell-скрипты позволяют добавить уровень оркестрации.
dev:
npm run dev
build:
npm run build
Где package.json:
{
"scripts": {
"dev": "parcel src/index.html",
"build": "parcel build src/index.html"
}
}
#!/bin/bash
npm run build
echo "Копирование статических файлов..."
cp -r public/* dist/
Parcel может быть частью сложного пайплайна сборки.
#!/bin/bash
set -e
echo "1. Установка"
npm ci
echo "2. Линтинг"
npx eslint src
echo "3. Сборка Parcel"
npx parcel build src/index.html --dist-dir dist
echo "4. Постобработка"
npx imagemin dist/assets/* --out-dir dist/assets
Parcel здесь выполняет роль центрального этапа между проверками кода и постобработкой ресурсов.
В shell-скриптах часто требуется запуск Parcel вместе с другими сервисами.
#!/bin/bash
npx parcel src/index.html &
PARCEL_PID=$!
node server.js &
SERVER_PID=$!
wait $PARCEL_PID $SERVER_PID
Такой подход используется в интеграционных сценариях, где Parcel работает как dev-сервер.
Shell позволяет гибко управлять сборкой Parcel в зависимости от условий.
#!/bin/bash
if git diff --quiet HEAD~1 HEAD -- src; then
echo "Изменений нет"
exit 0
fi
npx parcel build src/index.html
#!/bin/bash
case "$NODE_ENV" in
development)
npx parcel src/index.html --open
;;
production)
npx parcel build src/index.html --dist-dir dist
;;
*)
echo "Неизвестное окружение"
exit 1
;;
esac
В крупных проектах Parcel редко используется изолированно. Он становится компонентом общей системы:
Такая архитектура позволяет сохранять предсказуемость сборки при росте сложности проекта, не теряя при этом скорость работы и простоту запуска.