Что вызывает различия в установке пакетов npm

#npm #npm-install

#npm #npm-install

Вопрос:

У меня возникла проблема, из-за которой некоторые различия в моих пакетах npm между двумя машинами, используемыми для создания приложения, приводят к тому, что части моего веб-сайта ведут себя по-разному. Я пытаюсь выяснить, что вызывает разницу между пакетами, которые устанавливает npm, я проверил, что я использую одни и те же версии nvm, nodejs и npm (и что одна и та же версия активна при использовании nvm npm list -g --depth=0 ). Я проверил, что оба имеют одинаковые глобально установленные пакеты в одних и тех же версиях. Я установил номера версий в package.json, которые должны быть исправлены в соответствии с тем, что я указываю (нет ‘^’ или ‘~’ в номерах версий). Когда я делаю npm i это в проекте (даже после принудительной очистки кэша npm), я получаю различия между двумя машинами для того, что устанавливает npm:

добавлено 1061 пакет от 1024 участников и проверено 26052 пакета за 121 826 секунд
, обнаружено 5 уязвимостей (2 слабых, 3 умеренных)


добавлено 1110 пакетов от 1033 участников и проверено 17105 пакетов за 196.763 с
, обнаружено 6 уязвимостей (2 низкие, 3 умеренные, 1 высокая)

Как мне найти:

  1. Каковы эти различия (помимо попытки сравнить папку node_modules)
  2. Что вызывает различия в первую очередь. Насколько я понимаю, при использовании npm и исправлении версий не должно возникать подобных проблем.

Комментарии:

1. Вы уверены, что фиксируете файл блокировки пакета? Я видел проекты, в которых люди помещали это в свой gitignore

2. @Ferrybig это именно то, в чем заключается проблема. Для тех, кто читал, где package-lock.json не обязательно должен находиться в системе управления версиями, если вы не хотите подобных проблем, поместите его туда.

3. npm i --loglevel verbose было полезно узнать, что именно устанавливает npm

Ответ №1:

Если npm вызывает разные установки, убедитесь, что вы действительно фиксируете файл package-lock.json и что все компьютеры имеют одну и ту же основную версию npm.

Это становится проблемой, поскольку файл блокировки фактически содержит точные установленные версии, а разные версии потенциально имеют различия в своих зависимостях.

Когда был представлен этот файл блокировки, у разработчиков вошло в привычку помещать этот файл в свой gitignore, поскольку это был неожиданный файл, созданный npm, и что несколько версий npm используют разные хэши в файле блокировки.