intermediate

pnpm

Используйте content-addressed storage pnpm, strict layout node_modules, workspaces и поведение lockfile.

pnpm хранит содержимое пакетов один раз в content-addressed store и связывает проекты через strict layout `node_modules`. Импортировать можно только задекларированные зависимости — частый дифференциатор на интервью по сравнению с «плоским» npm.

| Возможность | Эффект | |-------------|--------| | Content store | Экономия диска между репозиториями | | Strict layout | Незадекларированные транзитивы падают рано | | Workspaces | Монорепо через `pnpm-workspace.yaml` | | Filters | `pnpm --filter <pkg> test` — одна package |

					# pnpm-workspace.yaml
packages:
  - 'apps/*'
  - 'packages/*'
				

`pnpm-lock.yaml` фиксирует граф. Версию pnpm фиксируют через `packageManager` в корневом `package.json`, чтобы CI и ноутбуки совпадали.

На интервью: скорость за счёт linking, почему phantom dependencies ломаются под pnpm, workspace filters и когда нужен deliberate hoisting (`public-hoist-pattern`) для legacy-инструментов.

Типовые ошибки: инструменты, ожидающие плоский `node_modules`; разные версии pnpm и формат lockfile; CI без Corepack или pinned pnpm.

Компромисс — строгость и диск против периодической работы по совместимости с экосистемой.

Чеклист:

  • Понимайте strict resolution.
  • Filters для монорепо.
  • Одна версия pnpm везде.
  • Hoist только осознанно.