Выбор ответа Middle Пакеты и зависимости обновлено
Фантомные зависимости
Вопрос
Код импортирует debug, хотя его нет в package.json проекта, и всё работает на npm. После перехода на pnpm импорт падает. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: npm поднимает транзитивные в корень, pnpm даёт только объявленные. Это фантомная зависимость: debug пришёл как зависимость другого пакета, npm поднял его в корень, и импорт заработал случайно. pnpm строит строгую структуру через ссылки, поэтому проблема вскрылась.
Варианты ответа
- pnpm не поддерживает пакет debug из-за его postinstall-скрипта и пропускает
- npm поднимает транзитивные в корень, pnpm даёт только объявленныеправильный ответ
- pnpm ставит пакеты только при первом импорте в коде
- pnpm требует указывать полные пути к файлам пакетов
Разбор
Это фантомная зависимость: debug пришёл как зависимость другого пакета, npm поднял его в корень, и импорт заработал случайно. pnpm строит строгую структуру через ссылки, поэтому проблема вскрылась. Лечится явным добавлением debug в package.json.
- pnpm ставит любые пакеты из реестра.
- Ленивой установки по импорту нет.
- Пути к пакетам pnpm разрешает так же, как Node.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.