Які відмінності між оновленням композитора та встановленням композитора?


Відповіді:


296

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

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, створеному оновленням композитора.


5
Ви не описували, що буде, якщо у нас не буде встановлено жодного файлу блокування та виклику композитора. Гарний опис btw.
користувач1954544

1
Важлива річ, яка може вас вкусити одного дня - файл блокування не є рекурсивним. Якщо якийсь пакет має слабо визначені залежності, і якщо вам трапиться чиста копія проекту на чистій машині, він може встановити різні версії вкладених залежностей, які можуть включати нові помилки або навіть порушувати зміни! Особливо актуально на серверах безперервної інтеграції та збирання. Рішення - полювання на вкладений проблемний пакет і додайте його фіксовану хорошу версію до json та файлу блокування.
JustAMartin

та composer global updateоновлює залежності у вашому глобальному сховищі від локальної системи ( COMPOSER_HOMEenv змінна)
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:

Команда оновлення читає composer.jsonфайл з поточного каталогу, обробляє його та оновлює, видаляє або встановлює всі залежності.


Дивіться також: Композитор: Все про файл блокування


Точка 3 композитора не має сенсу. Якщо файл .lock вже існує, він просто прочитає його і ніколи не "оновить" його. Він створений лише в тому випадку, якщо його ще не існує ..
Бен

@Ben Я уточнив моменти, дайте мені знати, чи зараз вони мають сенс.
kenorb

3

Найкраща різниця між composer updateіcomposer install

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

Щоб додати залежності, потрібно додати її вручну до файлу composer.json.

Якщо файл composer.lock існує, встановіть саме те, що визначено для цього файлу

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

За допомогою цієї команди жоден компонент не буде оновлений.

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

Щоб додати або видалити залежності, потрібно додати його вручну до файлу composer.json

  • Файл composer.lock буде проігноровано
  • залежність файлів composer.json буде встановлена ​​та оновлена ​​(якщо залежність не встановлена, вона буде завантажена)

Якщо ви не можете (або не знаєте, як додати або видалити бібліотеку, що насправді просто, просто додайте ім’я залежності та версії в властивості вимагати файл), змінити файл 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в інший час.

Що робити, якщо ми завжди використовуємо точну версію в composer.jsonтакій як "monolog/monolog": "1.0.1"?
Нам все ще потрібно, composer.lockтому що composer.jsonлише відстежувати основну версію вашої залежності, вона не може відслідковувати версію залежностей.

Що робити, якщо всі залежності залежно також використовують версію EXACT?
Уявіть, що ви починаєте з ВСІХ залежностей, які використовують ТОЧУЮ версію, тоді вас не хвилює composer.lock. Однак через кілька місяців ви додаєте нову залежність (або оновлюєте стару залежність), і залежності цієї залежності не використовують версію EXACT. Тоді краще доглядати composer.lockна початку.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.