Локальная установка vs глобальная

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


Локальная установка

Локальная установка подразумевает добавление Parcel в зависимости конкретного проекта. Он размещается в node_modules и фиксируется в package.json.

Установка

npm install --save-dev parcel

или

yarn add -D parcel

или

pnpm add -D parcel

После установки Parcel становится частью проекта, а не системы.


Запуск локальной версии

При локальной установке исполняемый файл находится в node_modules/.bin. Запуск осуществляется через:

npx parcel index.html

или через npm-скрипты:

{
  "scripts": {
    "dev": "parcel index.html",
    "build": "parcel build index.html"
  }
}

Запуск:

npm run dev

Преимущества локальной установки

1. Фиксация версии проекта

Версия Parcel записывается в package.json и package-lock.json / yarn.lock / pnpm-lock.yaml.

Это означает, что:

  • все разработчики используют одинаковую версию bundler
  • CI/CD окружение воспроизводимо
  • исключаются «работает у меня» проблемы

2. Изоляция зависимостей

Локальная установка не влияет на систему:

  • отсутствует загрязнение глобального окружения
  • разные проекты могут использовать разные версии Parcel
  • исключаются конфликты версий

3. Совместимость с инструментами разработки

Большинство современных инструментов (ESLint, Vite-подобные workflow, тестовые раннеры) предполагают локальные зависимости.

Parcel корректно интегрируется в:

  • npm scripts
  • CI pipelines
  • monorepo структуры (TurboRepo, Nx)

4. Предсказуемость в CI/CD

В пайплайнах достаточно выполнить:

npm ci
npm run build

Parcel гарантированно берётся из локальных зависимостей проекта.


Глобальная установка

Глобальная установка размещает Parcel в системной области Node.js, делая его доступным как команду в терминале.

Установка

npm install -g parcel

После этого команда parcel становится доступной из любого каталога.


Запуск глобальной версии

parcel index.html

или

parcel build index.html

Преимущества глобальной установки

1. Быстрый старт вне проекта

Глобальная установка удобна для:

  • одноразовых экспериментов
  • быстрого тестирования HTML/JS файлов
  • учебных задач без структуры проекта

2. Отсутствие локальной установки

Можно запускать Parcel без добавления в package.json, что снижает количество шагов для простых сценариев.


Недостатки глобальной установки

1. Конфликт версий

Основная проблема — единственная версия Parcel на всю систему.

Сценарий:

  • проект A требует Parcel 2.8
  • проект B требует Parcel 2.12

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


2. Потеря воспроизводимости

Проект не описывает свою сборочную систему полностью:

  • отсутствует контроль версии
  • CI может использовать другую версию
  • поведение сборки становится непредсказуемым

3. Сложности в командной работе

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


4. Зависимость от окружения

Глобальные пакеты зависят от:

  • операционной системы
  • прав доступа
  • конфигурации Node.js

Это ухудшает переносимость проекта.


Сравнение подходов

Управление версиями

  • Локальная установка: версия фиксируется в проекте
  • Глобальная установка: версия зависит от системы

Использование в команде

  • Локальная: одинаковое поведение у всех
  • Глобальная: возможны расхождения

CI/CD

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

Удобство запуска

  • Локальная: требует npx или npm scripts
  • Глобальная: команда доступна сразу

Практический стандарт использования

В современных JavaScript-проектах стандартом считается локальная установка. Глобальная установка рассматривается как вспомогательный инструмент для краткосрочных задач.

Типичный workflow:

npm install -D parcel
npm run dev
npm run build

npx и его роль

npx позволяет запускать локально установленный Parcel без явного указания пути:

npx parcel index.html

Поведение:

  • ищет Parcel в node_modules
  • при отсутствии может временно загрузить пакет
  • обеспечивает унифицированный запуск

Monorepo и локальная установка

В монорепозиториях локальная установка особенно важна:

  • каждая часть проекта может требовать свою версию Parcel
  • workspace-системы (npm workspaces, pnpm, Yarn) управляют зависимостями централизованно
  • глобальные зависимости становятся источником конфликтов

PATH и механика выполнения

При глобальной установке исполняемый файл добавляется в системный PATH.

При локальной установке используется:

node_modules/.bin/parcel

npm автоматически подставляет этот путь при использовании npm run.


Роль package.json

Локальная установка делает Parcel частью декларативной конфигурации проекта:

{
  "devDependencies": {
    "parcel": "^2.12.0"
  }
}

Это позволяет:

  • отслеживать изменения версии
  • автоматизировать установку
  • синхронизировать окружения

Типичные ошибки при использовании глобальной установки

  • запуск проекта без установленного локального Parcel
  • несовпадение версий между разработчиками
  • попытка деплоя на сервер без глобального пакета
  • непредсказуемое поведение сборки при обновлении Node.js

Рекомендованная архитектура использования

  • Parcel устанавливается локально как devDependency
  • запуск осуществляется через npm scripts
  • глобальная установка не используется в рабочих проектах
  • npx применяется для разовых запусков или тестирования

Поведение при обновлениях

Локальная установка

Обновление контролируется явно:

npm update parcel

или через изменение версии в package.json.


Глобальная установка

Обновление требует отдельного действия:

npm install -g parcel@latest

и может не синхронизироваться с проектами.


Итоговые различия в технической модели

Локальная установка:

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

Глобальная установка:

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