тут не package.json, а lock-файл пакетного менеджера. когда первый раз ставишь пакет он записывает в lock версию пакета. Этот lock идет в репку, когда другой разраб поднимет репку и сделает install, то получит версию пакета как у тебя (!!!). Если же он сделает update, то получит самую свежую версию, которая может не работать с твоим кодом. update пакетов большая, отдельная задача. Не нужно ее с другими задачами решать. После update нужно и тесты запускать и проверять все и вся что обновилось. Если что сломалось, то решать сразу или ставить ограничение на рабочую версию пакета с твоим кодом, позже решить конечно; И вот когда ты обновил зависимости и у тебя все норм, только тогда коммитишь обновленный lock в репку, чтоб другие у себя тоже обновили, только у себя они запускают install(!!!). Может в крупных проектах это как-то на автомате Основные же файлы пакетных менеджеров (packge.json, composer,json и т.д.) указывают лишь на список нужных пакетов и ограничения по версиям (не выше 2 мажорной версии, не ниже 1.2.1 версии и т.д.), а не конкретные версии (хотя тоже можно)
# PHP Composer (менеджер и подгрузчик пакетов, компонентов и зависимостей (composer.json) по стандарту PSR-4)
> Пакетный менеджер позволяет подключать сторонник код (пакеты) к нашему проекту \
> https://getcomposer.org/download/ \
> https://packagist.org/
- Название пакета состоит из [Автор(Огранизация)]/[Пакет]
- composer.json -> располагается в корне проекта
- composer.lock -> добавляется в git, содержит дерево зависимостпей и версий загруженных пакетов
- composer.lock-файл хранит в себе точные версии всех устанолвенных пакетов, что бы воссоздать именно то окружение, которое задумал разработчик
- Подключение автозагрузчика происходит через require_once \__DIR__ . '/vendor/autoload.php';
- "vendor/bin/..." содержит исполняемые команды-пакеты .bat (для Windows).
- Что бы обратиться из корня проекта нужно писать "php ./vendor/bin/phinx init"
- Секция "require-dev" в файле composer.json нужна для зависимостей при локальной разработке, что бы пакеты не ушли в прод
---
- Семантическое версионирование [1].[1].[0] = [Мажорная-версия].[Минорная-верия].[Патч-версия]
- "*" - разрешает обновление мажорной версии
- "^" - символ каретки разрешает обновление минорной и патч-версии
- "~" - разрешает обновление только патс-версии
---
### Команды
```bash
$ composer init
$ composer info
$ composer -v
$ composer --version
$ composer run-script build:app
$ composer install # если есть *.lock-файл установит версии пакетов из него
$ composer update # обновит все пакеты до самых свежих версий
$ composer update --no-dev # без секции "require-dev"
$ composer update symfony/symfony # обновить отдельный пакет-зависимость
$ composer require symfony/symfony # установить пакет
$ composer require symfony/symfony --dev # установка с флагом дев (только для разработки)
$ composer dump-autoload # обновить файл autoloader.php
$ composer dump-autoload -o # оптимизированный вариант
$ php ./vendor/bin/phinx init # запуст скриптов из корня проекта
# Столкнувшись с конфликтом "composer.lock" необходимо принять версию composer файлов из удаленной ветки
$ git checkout origin/{base} -- composer.lock composer.json
# Обновление через php
$ which php8.1
$-d memory_limit=-1 /usr/local/bin/composer-phar update --no-plugins --ignore-platform-reqs
$composer install -n --ignore-platform-req=ext-gd
```
/interactive/content_wiki/backend.Php.Dm.Composer-id-374.md