Недавно обновил vendor/package до 3.18.1, а там баг. Понятное дело, сразу создал тикет, но как быть в проекте, пока он не закрыт?



Первое, что приходит в голову, захардкодить в require версию 3.18.0. Это самый плохой вариант, потому что через какое-то время выйдет новая версия, там все пофиксят, добавят фич, а я так и буду сидеть на 3.18.0 даже после composer update. Это ещё и небезопасно, ведь так можно пропустить security patch. Это как нарушить open/closed — стандартное обновление не работает, а чтобы обновить нужно руками править composer.json.



Другой вариант — переписать ограничение в require на ^3.18, !=3.18.1, но, на мой взгляд, такую запись будет труднее воспринимать визуально. Кроме того, правило исключения в этой секции второстепенно.



Я предпочитаю добавлять проблемные версии в секцию conflict. Так я могу свободно менять глобальный констрейнт в require / require-dev и при необходимости точечно подправлять его в conflict.



{

"name": "vudaltsov/phpyh",

"require": {

"vendor/package": "^3.18"

},

"conflict": {

"vendor/package": "3.18.1"

}

}