Каковы различия между composer updateи composer install?
Каковы различия между composer updateи composer install?
Ответы:
обновление композитора
composer update обновит ваши зависимости, как они указаны в composer.json
Например, если вам требуется этот пакет в качестве зависимости:
"mockery/mockery": "0.9.*",
и вы фактически установили 0.9.1версию пакета, запуск composer updateприведет к обновлению этого пакета (например 0.9.2, если он уже выпущен)
подробно composer updateрасскажу:
composer.jsoncomposer.jsoncomposer.lockдля хранения версии установленных пакетовкомпозитор установить
composer installне будет ничего обновлять; он просто установит все зависимости, указанные в composer.lockфайле
В деталях:
composer.lockсуществует ли файл (если нет, запустите composer-updateи создайте его)composer.lockфайлcomposer.lockфайлеКогда устанавливать и когда обновлять
composer updateв основном используется в «фазе разработки», чтобы обновить наши пакеты проекта в соответствии с тем, что мы указали в composer.jsonфайле,
composer install в основном используется на этапе развертывания для установки нашего приложения на производственном сервере или в среде тестирования, используя те же зависимости, которые хранятся в файле composer.lock, созданном обновлением composer.
composer global updateобновляет зависимости в вашем глобальном репозитории в локальной системе ( COMPOSER_HOMEпеременная env)
composer updateсвою локальную систему и протестировать свое приложение, затем загрузить composer.lock на свой composer install
При запуске composer installон ищет файл блокировки и устанавливает все, что в нем содержится, если он не может его найти, он читает composer.json, устанавливает свои зависимости и генерирует файл блокировки.
При запуске composer updateон просто читает composer.json, устанавливает зависимости и обновляет файл блокировки (или создает новый файл блокировки).
composer installcomposer.lockсуществует.
composer.lockфайла.composer.lockже не существует.
composer.json.composer.lockфайл на основе установленных пакетов.Согласно composer help install:
Команда install читает
composer.lockфайл из текущего каталога, обрабатывает его, загружает и устанавливает все библиотеки и зависимости, описанные в этом файле. Если файл не существует, он будет искатьcomposer.jsonи делать то же самое.
composer updatecomposer.jsonфайла (устанавливает, обновляет и удаляет).composer.lockфайл в соответствии с изменениями.Согласно composer help update:
Команда update считывает
composer.jsonфайл из текущего каталога, обрабатывает его и обновляет, удаляет или устанавливает все зависимости.
Смотрите также: Composer: все дело в файле блокировки
Лучшая разница между composer updateиcomposer install
композитор установить
Чтобы добавить зависимости, вам нужно добавить их вручную в файл composer.json.
Если файл composer.lock существует, установите именно то, что указано в этом файле
Не любой компонент будет обновляться с помощью этой команды.
обновление композитора
Чтобы добавить или удалить зависимости, вам нужно добавить их вручную в файл composer.json.
Если вы не можете (или не знаете, как добавить или удалить библиотеку, что на самом деле просто, просто добавьте имя зависимости и версию в свойстве require файла), измените файл composer.json вручную или вы предпочтительнее использовать командную строку вместо этого, у композитора есть специальные функции для этого:
композитор требует
Например, если мы хотим добавить зависимость с помощью командной строки, мы просто выполним
composer require twig/twig
композитор удалить
Если вы хотите удалить неиспользуемую зависимость, мы просто выполним:
composer remove twig/twig --update-with-dependencies
if(composer.lock existed){
installs dependency with EXACT version in composer.lock file
} else {
installs dependency with LATEST version in composer.json
generate the composer.lock file
}
composer update = remove composer.lock -> composer install
Почему нам нужны 2 команды. Я думаю, что это может объяснить composer.lock.
Представьте себе, мы НЕ имеем composer.lockи composer.jsonесть зависимость "monolog/monolog": "1.0.*"или "monolog/monolog": "^1.0".
Тогда будет несколько случаев
composer installв другое время.Что если мы всегда будем использовать EXACT-версию, composer.jsonнапример "monolog/monolog": "1.0.1"?
Нам все еще нужно, composer.lockпотому что composer.jsonтолько отслеживать основную версию вашей зависимости, он не может отслеживать версию зависимости зависимости.
Что если все зависимости также используют версию EXACT?
Представьте, что вы начинаете со ВСЕХ зависимостей, которые используют версию EXACT, тогда вам все равно composer.lock. Однако несколько месяцев спустя вы добавляете новую зависимость (или обновляете старую зависимость), и зависимости этой зависимости не используют версию EXACT. Тогда лучше позаботиться composer.lockв начале.
Кроме того, семантическая версия имеет преимущество перед точной версией. Мы можем обновлять зависимость много раз во время разработки, и библиотека часто имеет небольшие изменения, такие как исправление ошибки. Тогда проще обновить зависимость, которая использует семантическую версию.