pnpm

Тема дорожной карты · Node.js

pnpm — это быстрый, экономичный по использованию дискового пространства, npm-совместимый менеджер пакетов для Node.js, который хранит все npm-пакеты в глобальном хранилище с адресацией по содержимому и использует жёсткие ссылки или симлинки для заполнения node_modules, означая, что каждая версия пакета хранится один раз независимо от того, сколько проектов зависит от неё. pnpm устанавливает зависимости значительно быстрее, чем npm и yarn, в CI/CD-средах, поскольку пропускает избыточные загрузки, когда глобальное хранилище уже содержит версию пакета, — это существенное улучшение производительности для крупных монорепозиториев Node.js. Протокол workspace в pnpm (workspace:*) позволяет организовывать монорепозитории, где несколько пакетов Node.js могут зависеть друг от друга локально, а pnpm по умолчанию обеспечивает строгую изоляцию зависимостей — пакеты не могут обращаться к npm-модулям, которые они явно не объявили, предотвращая баги из-за «фантомных зависимостей». Конфигурация pnpm хранится в .npmrc и pnpm-workspace.yaml, а pnpm генерирует собственный lockfile (pnpm-lock.yaml), который должен быть зафиксирован в системе контроля версий вместе с package.json. Для TypeScript-проектов серверной разработки с большим количеством пакетов pnpm является рекомендуемым менеджером пакетов благодаря своей скорости, корректности и превосходному монорепозиторному инструментарию.

Как это работает

pnpm трекает зависимости через package.json и пинит точную резолюцию в package-lock.json (npm), pnpm-lock.yaml (pnpm) или yarn.lock (yarn). Версии — semver (^1.2.3 пускает minor + patch; ~1.2.3 только patch; 1.2.3 строго). npm install (или pnpm install) читает manifest, резолвит граф, пишет lockfile, складывает пакеты в node_modules. pnpm — content-addressed store + симлинки; npm — копирует; runtime-резолюция одинакова.

Когда применять

pnpm — в monorepo и на dev-машинах с несколькими проектами; экономия диска + скорость реальны. npm — если хотите нулевое трение для новых контрибьюторов (он идёт с Node). Lockfile всегда коммитьте; в CI никогда npm install без него (npm ci / pnpm install --frozen-lockfile). Регулярно npm audit и npm outdated. Закрепляйте major-версии в package.json, когда стабильность важнее свежих фич.

Типичные ошибки

Ловушки pnpm: удаление package-lock.json "чтобы сбросить" (пересобираете всё дерево deps, можете втянуть breaking patch); npm install в CI вместо npm ci (lockfile тихо меняется); годами игнорируемые npm audit (CVE копятся); глобальные установки (npm i -g) на shared-машинах (path-коллизии). npx или pnpm dlx — для одноразовых бинарей.

Связанные понятия

Полезные ресурсы