Давай представим такую ситуацию:
20 пакетов, и у каждого свой лок-файл, с указанием на конкретный коммит одного сервиса. При этом в рамках одной версии без конфликта.
Какой ставить? :)
Потому что это пакеты (стороннее переиспользуемое решение), а не конечный код.
Здесь composer.json для того, чтобы описать зависимости и требования самого пакета.
feycot, дополню Димин ответ - если у пакета правильно указана версия зависимости ( особенно, если она в пределах минорной, нп. 1.*), то не должно быть ломающих обновлений, ломающие обновления могут быть в мажорных версиях (нп. в ограничение >= 1.1 попадет и версия 1.1.1, и 1.2, и 2.0), потому что мажорная версия не обязана гарантировать обратную совместимость
feycot, соглашения есть, почитайте детали версионирования в документации композера. У пакета всегда есть master версия, которая обязана быть стабильной
Понял, т.е. мы просто говорим, что наш пакет использует такие-то зависимости и они могут обновляться до такой-то версии, но жестко их не фиксирует. Потому что эти же зависимости могут в другом месте и подтягивается побходящая для всех.