как именно работает флаг обновления package.json (под капотами) - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь понять, как работает процесс обновления package.json.Например:

"dependencies": {
 "express": "^4.16.4",
},

В этом случае у меня есть Экспресс с флагом минус ^ только для обновления 4.XX.Это понятноНо как именно это обновление работает?Я имею в виду, если я удаляю папки node_module (и package-lock.json) через 1 неделю после первой установки (и выпускается новая версия Express), какую версию я загружаю?4.16.4 или (например) 4.17.0?Я думаю, что 4.17.0, но package.json по-прежнему остается с 4.16.4 (текстовое описание), а об обновлении сообщается в package-lock.json или что-то еще?Я никогда не видел, чтобы числа менялись в файле package.json.

Я очень смущен этим.

Иногда, когда я проверяю какой-то модуль из их папки, я вижу другую версию изpackage.json.Почему?

1 Ответ

1 голос
/ 09 апреля 2019

Символ каретки (^) будет обновлен до последней основной версии (первое число).^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, этот файл похож на " снимок " ваших текущих конфигураций и зависимостей сборки .Таким образом, этот файл будет обновляться по мере внесения вами изменений, влияющих на построение вашего проекта: например, либо добавление новых зависимостей, либо обновление существующих версий. Это связано с тем, что этот файл должен быть "источником истины" для других на случай, если они захотят создать свой проект и внести в него свой вклад.

Надеюсь, это поможет!

...