Символ каретки (^) будет обновлен до последней основной версии (первое число).^4.16.4
будет соответствовать любому выпуску 4.x.x
, включая 4.17.x
, но будет задерживаться при обновлении до версии 5.0.0.
версии Express
, поскольку это основной выпуск с серьезными изменениями в библиотеке Express
.
Что касается вашего вопроса: "Если бы я должен был удалить каталог node_modules
и файл package-lock.json
через неделю после первой установки Express
и сказать, что в этот период была выпущена новая версия Express
Какую версию Express
я бы скачал?
Это зависит от того, была ли самая последняя версия major , minor, или patch выпуск. Если последняя версия была второстепенной или исправленной: изменение второго или третьего номера , то npm установит последнюю версию 4.xx Express
. В вашем конкретном случаепример сценария, да, это установит Express
V4.17.0 . Вы также правы, что package.json
по-прежнему перечислит "express: "^4.16.4"
в качестве необходимой зависимости для построения вашего проекта. Это из-за того, как каретка работает, как объяснялось ранее: возьмитепоследняя версия 4.xx Express
.Нет необходимости обновлять список Express
в package.json
до последней версии, так как морковь позаботится об этом за вас.Если вы подумаете об этом, это действительно хорошая функция, поскольку альтернативой будет , вручную указывать каждую новую версию , даже если это всего лишь минорная версия или версия патча.И ни у кого нет времени на это ... если только это не основной выпуск.
Кроме того, поскольку последний Express
релиз не был основным выпуском , то есть первым номером вашего Semver
не изменилось, нет никаких «критических изменений», поэтому обычно безопасно , чтобы просто взять последнюю версию.Тем не менее, при этом вы можете указать точную версию любой зависимости, если хотите.Что касается файла package-lock.json
, этот файл похож на " снимок " ваших текущих конфигураций и зависимостей сборки .Таким образом, этот файл будет обновляться по мере внесения вами изменений, влияющих на построение вашего проекта: например, либо добавление новых зависимостей, либо обновление существующих версий. Это связано с тем, что этот файл должен быть "источником истины" для других на случай, если они захотят создать свой проект и внести в него свой вклад.
Надеюсь, это поможет!