npm, pnpm или yarn — какой менеджер пакетов выбрать новичку

npm, pnpm, yarn — три инструмента, и новичок думает, что выбирает между тремя разными хранилищами пакетов. Нет.
Неожиданная штука: все трое ставят одни и те же пакеты из одного и того же реестра. Твой react будет байт в байт одинаковым, какой ни возьми. Разница не в том, что они ставят, а в том, как хранят это у тебя на диске — и вот тут pnpm экономит тебе гигабайты.
Главное: все трое ставят одно и то же
Все три — менеджеры пакетов для Node.js. Они читают твой package.json, скачивают зависимости из публичного реестра npm и раскладывают их в папку node_modules.
Реестр — один на всех. Поэтому «какой лучше ставит пакеты» — неправильный вопрос: ставят одинаково. Правильный — «как они это делают и чем это удобно тебе».
Таблица: npm, pnpm, yarn по-честному
| критерий | npm | pnpm | yarn | |----------|-----|------|------| | Надо ставить отдельно | Нет, идёт с Node | Да (или corepack) | Да (или corepack) | | Скорость | Норм | Обычно быстрее всех | Быстрый | | Место на диске | Копия в каждом проекте | Один общий склад | Копия (классический) | | Строгость | Мягкий | Только объявленные пакеты | Мягкий (классический) | | Кому | Дефолт, «просто работает» | Экономия места, монорепо | Проекты, где уже он |
npm — дефолт, который уже у тебя
npm приезжает вместе с Node.js — ставить ничего не надо. Про него отдельный разбор — что такое npm. Команды, которые ты и так знаешь: npm install, npm run.
Плюс: он уже есть, вся документация мира по умолчанию про него, ноль настройки.
Минус: каждый проект хранит свою полную копию node_modules. Десять проектов с React — десять копий React на диске. Раньше npm был и заметно медленнее, но последние версии подтянулись.
pnpm — экономит место и строже
Фишка pnpm в одном слове: склад. Он держит каждую версию пакета один раз в общем хранилище на диске, а в проекты кладёт не копии, а жёсткие ссылки на этот склад.
Итог: десять проектов с React делят одну физическую копию. На диске с кучей проектов это реально гигабайты экономии. Плюс он обычно быстрее — копировать нечего, только слинковать.
Второй плюс — строгость. pnpm не даёт коду использовать пакет, который ты не прописал в package.json, даже если тот случайно оказался в node_modules. Это ловит баги, которые у npm всплывают только на проде.
Минус: надо поставить (или включить через corepack), и строгость иногда ругается на криво собранные старые пакеты.
yarn — исторический ускоритель, теперь ниша
yarn появился в 2016-м, когда npm был медленным и непредсказуемым. Yarn это чинил и был явным апгрейдом. С тех пор npm догнал, а pnpm обошёл по экономии места.
Классический yarn (v1) сегодня — это «работает, и ладно» на старых проектах. Новый yarn (v2+) ушёл в свою схему хранения, мощную, но с порогом входа — для новичка перебор. Брать yarn с нуля сейчас особой причины нет, кроме «в этом проекте уже он».
Кому что подойдёт
Без виляния:
- Только начинаешь, один проект — бери npm. Он уже стоит, вся документация под него, думать не о чем.
- Несколько проектов или монорепо, жалко места — ставь pnpm. Общий склад и строгость окупаются быстро. (На нём, кстати, собран и админ KODiQ.)
- Пришёл в проект, где уже yarn — оставайся на yarn. Менять менеджер посреди проекта — риск ради нуля пользы.
Главное правило: в одном проекте — один менеджер. Не смешивай.
Можно ли пользоваться разными менеджерами в одном проекте?
Нет, выбери один. У каждого свой файл-замок (package-lock.json, pnpm-lock.yaml, yarn.lock), который фиксирует точные версии. Два менеджера — два конфликтующих замка и классика «у меня работает, у тебя нет». Один проект — один менеджер и один lock-файл в репозитории.
Обязательно ли переходить с npm на pnpm?
Нет. npm отлично работает, и для одного проекта разница почти незаметна. Переход осмыслен, когда проектов много и место со скоростью начинают раздражать, или когда заводишь монорепо. Нет боли — нет причины менять.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





