composer.json - описание проекта и его зависимостей с допустимыми диапазонами версий. composer.lock - зафиксированные точные версии всех зависимостей (включая транзитивные).
// composer.json
"require": {
"guzzlehttp/guzzle": "^7.0" // любая 7.x
}
// composer.lock
"packages": [{
"name": "guzzlehttp/guzzle",
"version": "7.8.1" // точная версия
}]composer install использует lock-файл (воспроизводимая сборка). composer update обновляет lock-файл по правилам из json.