npm, pnpm или Yarn
Вопрос
Чем pnpm отличается от npm и почему многие команды на него переходят?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
глобальное хранилище: каждая версия пакета на диске один раз
установка через жёсткие и символические ссылки, быстрее и экономнее
строгий 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 ошибок.