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 пакета?
В чем разница между --save и --save-dev?
Как задать переменные окружения из файла package.json?
Как использовать исполняемые файлы из пакета, установленного локально в node_modules?
Как указать необходимую версию Node.js в файле package.json?