В чём разница между composer.json и composer.lock
В composer.json
вы указываете, какие пакеты должны быть установлены и с какими версиями. Например:
{
"require": {
"laravel/breeze": "^1.19",
},
}
Эта запись сообщает Composer установить пакет laravel/breeze
с версией выше 1.19
.
Все возможные варианты синтаксиса символов ^
и *
для версий описаны в документации по Composer.
Теперь, какая именно версия установлена в данный момент? Вот тут приходит на помощь файл composer.lock
.
Когда вы запускаете команду composer install
, она проверяет composer.lock
на наличие точной заблокированной версии пакета, которая была установлена ранее во время предыдущей composer install
.
Например:
{
// ...
"name": "laravel/breeze",
"version": "v1.19.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/breeze.git",
"reference": "4bbb1ea3476901c4f5fc706f8d80e4eac31c3afb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/breeze/zipball/4bbb1ea3476901c4f5fc706f8d80e4eac31c3afb",
"reference": "4bbb1ea3476901c4f5fc706f8d80e4eac31c3afb",
"shasum": ""
},
// ...
}
Вы можете увидеть, что Laravel Breeze v1.19.1
была установлена в прошлый раз.
Когда вы запускаете команду composer update
, composer проверяет наличие более нового пакета, и если он есть, загружает новую версию пакета и обновляет содержимое composer.lock
новой версией.
Вы можете увидеть разницу в composer.lock
для пакета laravel/breeze
после запуска composer update
, который обновил версию пакета с 1.19.1 до 1.19.2 ниже:
Совет: На продакшене всегда используйте composer install
и никогда не обновляйте его, потому что иногда обновление пакетов без тестирования может привести к поломке вашего приложения. Используйте composer update
локально, затем зафиксируйте обновлённый файл composer.lock
в репозитории, а затем запустите composer install
на рабочем сервере.