В чём разница между composer.json и composer.lock

Источник: «Difference Between composer.json and composer.lock»
В каждом Laravel/PHP проекте у вас будет два файла: composer.json и composer.lock. В чём разница между ними? Зачем нужен composer.lock, если есть composer.json.

В 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 ниже:

Diff composer.lock после обновления laravel/breeze

Совет: На продакшене всегда используйте composer install и никогда не обновляйте его, потому что иногда обновление пакетов без тестирования может привести к поломке вашего приложения. Используйте composer update локально, затем зафиксируйте обновлённый файл composer.lock в репозитории, а затем запустите composer install на рабочем сервере.

Дополнительные материалы

Предыдущая Статья

Vim: Установка плагинов

Следующая Статья

10 Функций JavaScript и TypeScript, которых я избегаю