npm install против update - в чем разница?
Какова практическая разница между командами npm install и npm update? Когда мне следует использовать ту или иную команду?
3 ответ(ов)
Команда npm update используется для обновления установленных пакетов до их последних версий, соответствующих версиям, указанным в файле package.json. Эта команда устанавливает и обновляет модули, если для них доступны более новые версии.
С другой стороны, команда npm install устанавливает все зависимости, перечисленные в package.json, но не обновляет их до последних версий. Если зависимости уже установлены, npm install просто проверяет их соответствие записям в package.json и не вносит изменений.
Таким образом, основное различие заключается в том, что npm update обновляет пакеты, а npm install — просто устанавливает или проверяет существующие.
Множество отличий уже упоминались, вот еще одно:
Запуск npm install в корневом каталоге вашего исходного кода выполнит различные скрипты: prepublish, preinstall, install, postinstall. В зависимости от того, что делают эти скрипты, npm install может выполнять значительно больше работы, чем просто установку зависимостей.
У меня только что возник случай, когда prepublish вызывал make, а Makefile был настроен для получения зависимостей, если package.json был обновлён. Вызов npm install изнутри Makefile привел бы к бесконечной рекурсии, в то время как вызов npm update сработал без проблем, установив все зависимости, чтобы сборка могла продолжиться, даже если make был вызван напрямую.
Когда вы выполняете команду npm update, она обновляет пакеты до последних доступных версий, игнорируя контрольные суммы, сохраненные в файле package-lock.json. Это может стать проблемой, особенно если ваши зависимости указывают на приватные репозитории. Контрольные суммы для таких пакетов могут оказаться поврежденными, и, в результате, команда npm install будет выдавать ошибку несоответствия.
Типичная ошибка может выглядеть так:
npm WARN tarball tarball data for repo@git+ssh://[email protected]/company/repo.git#b2d8280dfb292c13c614352adra910f298a2a771 (sha512-36mxm1NMCHisdfsdfsdfsdsdf3NtFvwpzpjCEZfQTXmoi04B3qVrsTs1tnsdsdfsdfZNIK8lbEGVRVKcDX5u9pY7B==) seems to be corrupted. Trying again.
npm ERR! code EINTEGRITY
Чтобы избежать этой проблемы, вы можете попробовать следующие шаги:
Удалить
node_modulesиpackage-lock.json: Смело удалите папкуnode_modulesи файлpackage-lock.json, а затем выполнитеnpm installснова. Это позволит вам сгенерировать новыйpackage-lock.jsonс актуальными контрольными суммами.Проверить зависимости: Убедитесь, что зависимости в вашем
package.jsonуказаны правильно и доступны.Использовать фиксированные версии: Если это возможно, указывайте фиксированные версии ваших зависимостей, чтобы избежать потенциальных проблем с обновлениями.
Следуя этим шагам, вы сможете восстановить работоспособность вашего проекта без ошибок, связанных с контрольными суммами.
Как узнать версию установленного npm пакета?
В чем разница между тильдой (~) и каретом (^) в package.json?
Как задать переменные окружения из файла package.json?
Что делает npm install --legacy-peer-deps? Когда рекомендуется использовать и какой потенциальный случай?
Не удалось проверить обновление npm