hostprofi.ru
Подобрать хостинг
Термин·буква P

PNPM

краткое определение

PNPM (Performant NPM) — альтернативный менеджер пакетов для Node.js. Использует хранилище с жёсткими ссылками (hard links) на глобальный кэш вместо копирования пакетов в каждый проект. Это экономит дисковое пространство в 5-10 раз и ускоряет установку при нескольких проектах на сервере.

PNPM (Performant NPM) — менеджер пакетов Node.js, созданный как более эффективная альтернатива npm и yarn. Ключевое отличие: PNPM не копирует пакеты в node_modules каждого проекта, а создаёт жёсткие ссылки (hard links) на глобальный контентно-адресуемый кэш (~/.pnpm-store). Пакет lodash@4.17.21, используемый в 100 проектах, хранится на диске один раз. На VPS с несколькими Node.js-проектами это экономит 5-15 ГБ дискового пространства.

Как работает

При pnpm install:

  1. Пакеты скачиваются в глобальный store (~/.pnpm-store/v3/files/) с разбивкой по хэшам.
  2. В node_modules/.pnpm/ создаётся плоская структура с символическими и жёсткими ссылками.
  3. Публичная директория node_modules/ содержит только прямые зависимости проекта (без hoisting чужих транзитивных зависимостей).

Это решает «призрачные зависимости» (phantom dependencies) — классическую проблему npm: когда пакет использует транзитивную зависимость, не указанную в своём package.json, и это иногда работает только потому, что npm поднял её вверх через hoisting.

Workspace-монорепозитории: PNPM Workspaces позволяет управлять несколькими пакетами в одном репозитории с общим кэшем. Подходит для монорепозиториев на Node.js. Аналог yarn workspaces и npm workspaces, но эффективнее.

Сравнение менеджеров пакетов

Параметрnpmyarnpnpm
Дисковое пространствоМного (копии)Много (копии)Минимально (hard links)
Скорость установкиМедленнееБыстрее npmБыстрее yarn
Phantom depsЕсть (hoisting)ЧастичноНет (строгая изоляция)
WorkspacesДа (с npm 7)ДаДа (лучшая реализация)

История

PNPM создан Зольтаном Кочаном в 2016 году на Linux-based CI/CD серверах. Версия 3.0 (2019) ввела content-addressable store. PNPM 6.0 (2021) добавил lockfile v5, версия 7.0 (2022) ускорила установку на 50-70% по сравнению с npm 7. По данным npm downloads, pnpm в 2023-2024 годах входит в тройку наиболее используемых менеджеров пакетов.

На что обращать внимание

PNPM устанавливается глобально: npm install -g pnpm или через corepack enable && corepack prepare pnpm@latest --activate. На серверах с несколькими Node.js-проектами (CI/CD, dev-среды) переход на pnpm даёт реальную экономию диска. В связке с nginx как прокси-сервером PNPM используется для сборки frontend-ассетов. В Docker: используйте .dockerignore для node_modules и монтирования store для ускорения сборки. Совместим со всеми npm-пакетами — замена npm в скриптах package.json тривиальна (заменить npm run на pnpm run).

PNPM в CI/CD

PNPM особенно эффективен в CI/CD пайплайнах: глобальный store можно закэшировать между сборками, что снижает время установки зависимостей с минут до секунд. GitHub Actions: cache: pnpm в action setup-node. GitLab CI: настройте .pnpm-store как artifact cache. В Docker многослойной сборке: сначала COPY pnpm-lock.yaml . и RUN pnpm install --frozen-lockfile, затем — копирование исходников. Это позволяет Docker кэшировать слой зависимостей и не устанавливать их при каждой сборке.

Другие термины