Каковы различия между обновлением композитора и его установкой?

Ответы:

297

обновление композитора

composer update обновит ваши зависимости, как они указаны в composer.json

Например, если вам требуется этот пакет в качестве зависимости:

"mockery/mockery": "0.9.*",

и вы фактически установили 0.9.1версию пакета, запуск composer updateприведет к обновлению этого пакета (например 0.9.2, если он уже выпущен)

подробно composer updateрасскажу:

  • Читать composer.json
  • Удалить установленные пакеты, которые больше не требуются в composer.json
  • Проверьте наличие последних версий необходимых пакетов
  • Установите последние версии ваших пакетов
  • Обновление composer.lockдля хранения версии установленных пакетов

композитор установить

composer installне будет ничего обновлять; он просто установит все зависимости, указанные в composer.lockфайле

В деталях:

  • Проверьте, composer.lockсуществует ли файл (если нет, запустите composer-updateи создайте его)
  • Читать composer.lockфайл
  • Установите пакеты, указанные в composer.lockфайле

Когда устанавливать и когда обновлять

  • composer updateв основном используется в «фазе разработки», чтобы обновить наши пакеты проекта в соответствии с тем, что мы указали в composer.jsonфайле,

  • composer install в основном используется на этапе развертывания для установки нашего приложения на производственном сервере или в среде тестирования, используя те же зависимости, которые хранятся в файле composer.lock, созданном обновлением composer.

Moppo
источник
5
Вы не описали, что будет, если у нас нет файла блокировки и вызовите composer install. Хорошее описание, кстати.
user1954544
1
Важная вещь, которая может укусить вас однажды - блокировка файла не рекурсивна. Если какой-то пакет имеет слабо определенные зависимости и если вам удастся получить чистую копию проекта на чистой машине, он может установить разные версии вложенных зависимостей, которые могут включать новые ошибки или даже критические изменения! Особенно актуально для непрерывной интеграции и сборки серверов. Решение - найти вложенный проблемный пакет и добавить исправленную исправленную версию в json и файл блокировки.
JustAMartin
и composer global updateобновляет зависимости в вашем глобальном репозитории в локальной системе ( COMPOSER_HOMEпеременная env)
Yousha Aleayoub
1
Тогда как я могу безопасно обновить определенный пакет на производственном сервере?
Мишель
@Michel Сначала вы должны запустить composer updateсвою локальную систему и протестировать свое приложение, затем загрузить composer.lock на свой composer install
рабочий
58

При запуске composer installон ищет файл блокировки и устанавливает все, что в нем содержится, если он не может его найти, он читает composer.json, устанавливает свои зависимости и генерирует файл блокировки.

При запуске composer updateон просто читает composer.json, устанавливает зависимости и обновляет файл блокировки (или создает новый файл блокировки).

Тим Шихан
источник
23

composer install

  1. Если composer.lockсуществует.
    • Обрабатывает и устанавливает зависимости из composer.lockфайла.
  2. Если composer.lockже не существует.
    • Пакет процесса устанавливается из composer.json.
    • Создает composer.lockфайл на основе установленных пакетов.

Согласно composer help install:

Команда install читает composer.lockфайл из текущего каталога, обрабатывает его, загружает и устанавливает все библиотеки и зависимости, описанные в этом файле. Если файл не существует, он будет искать composer.jsonи делать то же самое.


composer update

  1. Обрабатывает зависимости из composer.jsonфайла (устанавливает, обновляет и удаляет).
  2. Создает или обновляет composer.lockфайл в соответствии с изменениями.

Согласно composer help update:

Команда update считывает composer.jsonфайл из текущего каталога, обрабатывает его и обновляет, удаляет или устанавливает все зависимости.


Смотрите также: Composer: все дело в файле блокировки

kenorb
источник
точка установки композитора 3 не имеет смысла. Если файл .lock уже существует, он просто прочитает его и никогда не "обновит". Он создается только в том случае, если он еще не существует ..
Бен
@Ben я прояснил вопросы, дайте мне знать, если они имеют смысл сейчас.
Кенорб
3

Лучшая разница между composer updateиcomposer install

композитор установить

Чтобы добавить зависимости, вам нужно добавить их вручную в файл composer.json.

Если файл composer.lock существует, установите именно то, что указано в этом файле

  • В противном случае прочитайте файл composer.json, чтобы узнать, какие зависимости нужно установить.
  • Напишите composer.lock с информацией о проекте (установленные зависимости)

Не любой компонент будет обновляться с помощью этой команды.

обновление композитора

Чтобы добавить или удалить зависимости, вам нужно добавить их вручную в файл composer.json.

  • Файл composer.lock будет игнорироваться
  • Зависимости файла composer.json будут установлены и обновлены (если зависимость не установлена, она будет загружена)

Если вы не можете (или не знаете, как добавить или удалить библиотеку, что на самом деле просто, просто добавьте имя зависимости и версию в свойстве require файла), измените файл composer.json вручную или вы предпочтительнее использовать командную строку вместо этого, у композитора есть специальные функции для этого:

композитор требует

Например, если мы хотим добавить зависимость с помощью командной строки, мы просто выполним

composer require twig/twig

  • Файл composer.json будет изменен автоматически, и будет добавлена ​​новая зависимость
  • зависимость будет загружена в проект

композитор удалить

Если вы хотите удалить неиспользуемую зависимость, мы просто выполним:

composer remove twig/twig --update-with-dependencies

  • Веточка будет удалена со всеми его зависимостями
Маянк Дудакия
источник
1

композитор установить

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".
Тогда будет несколько случаев

  • Мы хорошо работаем сегодня с текущей версией зависимости (например: 1.0.0), но через несколько месяцев, обновление зависимости (например: 1.0.1) и, возможно, ошибка
  • Другой член группы может иметь другую версию зависимости, если он запускается composer installв другое время.

Что если мы всегда будем использовать EXACT-версию, composer.jsonнапример "monolog/monolog": "1.0.1"?
Нам все еще нужно, composer.lockпотому что composer.jsonтолько отслеживать основную версию вашей зависимости, он не может отслеживать версию зависимости зависимости.

Что если все зависимости также используют версию EXACT?
Представьте, что вы начинаете со ВСЕХ зависимостей, которые используют версию EXACT, тогда вам все равно composer.lock. Однако несколько месяцев спустя вы добавляете новую зависимость (или обновляете старую зависимость), и зависимости этой зависимости не используют версию EXACT. Тогда лучше позаботиться composer.lockв начале.

Кроме того, семантическая версия имеет преимущество перед точной версией. Мы можем обновлять зависимость много раз во время разработки, и библиотека часто имеет небольшие изменения, такие как исправление ошибки. Тогда проще обновить зависимость, которая использует семантическую версию.

Фан Ван Линь
источник