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 только осознанно.