Почему мой файл yarn.lock изменяется при запуске установки yarn после увеличения версии в package.json?
Я прочитал документацию по командам yarn и yarn.lock, и меня убедили, что весь смысл файла yarn.lock заключается в использовании версии, указанной в этом файле.
Что мне было интересно, так это то, когда фактически использовалась версия, указанная в yarn.lock? Я вручную изменил версию пакета в package.json и перезапустил yarn install
и файл yarn.lock был обновлен для использования новой версии. Я думал, что он будет заблокирован, поэтому не имеет значения, какая новая версия указана в package.json, поскольку yarn.lock указывает версию для этого пакета, он будет использовать эту более старую версию.
Если именно так должен работать yarn.lock, почему бы просто не указать версию EXACT в package.json вместо использования ~ или ^ перед номерами версий. Прямо сейчас я должен сделать это, чтобы не изменять файл yarn.lock при запуске yarn install
так или иначе.
Так когда же на самом деле используется заблокированная версия / это правильный способ использования yarn.lock?
2 ответа
Если вы измените версию зависимости в package.json, файл блокировки будет обновлен, чтобы отразить это. Назначение файла блокировки в два раза. Один из них - позволить вам (и вашим коллегам) использовать версии зависимостей, которые, как вы знаете, будут работать и проверены. И два, для авторов зависимостей, чтобы указать, какие версии зависимости ваших зависимостей использовать. Целью здесь является стабильность.
Если вы хотите поиграть и увидеть назначение файла блокировки, создайте свой собственный модуль npm и отправьте его в реестр npm с версией 1.0.0. Затем в своем проекте добавьте этот модуль в качестве зависимости с чем-то вроде "myModule": "1.xx". Если бы вы сейчас установили свои модули, у вас был бы "myModule v1.0.0", и ваш файл блокировки будет отражать это.
Теперь обновите ваш модуль до версии 1.1.0 и снова установите ваши модули. На этом этапе, если у вас нет файла блокировки, вы получите "myModule v1.1.0". Но поскольку файл блокировки похож на снимок того, как должно выглядеть ваше дерево зависимостей, вы будете придерживаться "myModule v1"..0.0". Конечно, если вы удалите файл блокировки, новый будет сгенерирован с "myModule v1.1.0". Аналогично, обновление вашего package.json также обновит файл блокировки.
- Обратите внимание, что пример, который я привел, для npm, а не для пряжи, но концепция та же.
Здесь длинная дискуссия по проблемам github . TLDR; Проблема, кажется, исправлена в современной пряже .