Почему я получаю другую версию зависимости в файле package-lock.json?

#angular #npm #package.json

Вопрос:

Я работаю над angular 10 приложением. Почему я вижу версию зависимости, package-lock.json которая отличается от той, которую я ввел в package.json cmd : npm install

пример :

  • пакет.json

    «зависимости»: { «подчеркивание»: «^1.12.0«, …. }

  • затем я обедаю npm install
  • Упаковка-замок

    «подчеркивание»: { «версия»: «1.13.1«, «решено»: «https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz», «целостность»: «sha512-…» },

Почему в package.json это версия 1.12.0, а в другом json-1.13.1 ????

Ответ №1:

Вы можете ознакомиться с полной документацией semver для получения более подробной информации, но когда вы пишете ^1.12.0 , вы фактически пишете диапазон версий, а не одну версию.

Краткая справка:

  • ^1.12.0 => последняя версия, которая 1.x.x
  • ~1.12.0 => последняя версия, которая 1.12.x
  • 1.12.0 => точно 1.12.0

Согласно соглашению semver MAJOR.MINOR.PATCH , любая версия с одинаковым MAJOR номером не содержит критических изменений, поэтому вы обычно видите версии пакетов, указанные в ^ диапазоне; вы получаете последние обновления, и ваш код не ломается!

Однако, в отличие package.json от , package-lock.json всегда содержит точные версии пакетов, установленных для…ну…заприте их. Вот почему вы package-lock.json можете показать более высокую версию, чем та, в которой вы указали package.json .

Конечно, если по какой-либо причине это не нормально и вам нужно придерживаться более конкретной версии, вы можете использовать один из других селекторов.