Ответ вслух Middle Пакеты и зависимости обновлено

npm, pnpm или Yarn

Вопрос

Чем pnpm отличается от npm и почему многие команды на него переходят?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

npm раскладывает зависимости плоско в nodemodules каждого проекта: много копий одних и тех же пакетов и случайный доступ к пакетам, которые ты не объявлял. pnpm держит каждую версию пакета один раз в глобальном хранилище и собирает nodemodules из ссылок, поэтому установка быстрее и диска уходит меньше.

Что должно прозвучать в ответе

  • глобальное хранилище: каждая версия пакета на диске один раз

  • установка через жёсткие и символические ссылки, быстрее и экономнее

  • строгий node_modules: нет фантомных зависимостей

  • удобные workspaces для монорепо

  • по умолчанию не запускает install-скрипты зависимостей без разрешения

  • минус: инструменты, рассчитывающие на плоский node_modules, иногда требуют настройки

Что могут спросить следом

  • Что такое фантомная зависимость?
  • Что такое Plug'n'Play в Yarn?
  • Почему postinstall-скрипты опасны?

Разбор

npm раскладывает зависимости плоско в node_modules каждого проекта: много копий одних и тех же пакетов и случайный доступ к пакетам, которые ты не объявлял. pnpm держит каждую версию пакета один раз в глобальном хранилище и собирает node_modules из ссылок, поэтому установка быстрее и диска уходит меньше. Структура строгая: код видит только свои объявленные зависимости, так что фантомные зависимости ломаются сразу, а не после обновления. У pnpm удобные workspaces для монорепо, и в свежих версиях он по умолчанию не запускает install-скрипты зависимостей, это плюс к безопасности. Минус: редкие инструменты ожидают плоскую структуру, тогда нужна настройка вроде public-hoist-pattern.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.