composer.lock: як це працює?


76

Я намагаюся зрозуміти цю частину: http://getcomposer.org/doc/02-libraries.md#lock-file

цей файл блокування не матиме жодного впливу на інші проекти, які залежать від нього. Це впливає лише на основний проект "

Чи означає це, що якщо проект P залежить від бібліотеки A, а бібліотека A залежить від бібліотеки B v1.3, проект P не дбає про версію бібліотеки B і, можливо, замість цього встановить B 1.4? Який сенс тоді?

Або це означає протилежне, як можна було б очікувати від менеджера залежностей?

Відповіді:


78

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

Наведена документація стосується лише файлу блокування. Якщо ваш проект P залежить від бібліотеки A, а A залежить від B v1.3. ***, то, якщо A містить файл блокування, який повідомляє, що хтось запустив "оновлення композитора", в результаті чого встановлено B v1.3.2, то встановіть A у свій проект P все ще може встановити 1.3.3, оскільки composer.json(не .lock!) Залежність визначається як 1.3. *.

Файли блокування завжди містять точні номери версій і корисні для передачі перевіреної версії колегам або під час публікації програми. Для бібліотек composer.jsonважлива інформація про залежність в .


Як можна оновити всі залежності до того, що вказано у файлі блокування (наприклад, при перенесенні проекту з інсценування в реальний час)?
Петах

5
Просто запустіть установку composer.phar - яка встановлює / оновлює / видаляє все до стану файлу блокування
naderman

У Python і Ruby існує подібна концепція, що включає Gemfile.lock і requirements.txt. Див .: caremad.io/blog/setup-vs-requirement та yehudakatz.com/2010/12/16/… Чи не означає це, що для PHP "Бібліотеки" compooser.lock не потрібно зберігати. але для PHP "Програми" composer.lock має бути здійснено?
CMCDragonkai

Файл composer.lock може бути корисним і для бібліотек. Не для тих, хто залежить від бібліотеки, але для розробників бібліотеки, які повідомляють, які версії вони встановили для запуску тестів або проблем налагодження, це також може допомогти уточнити, з якими версіями залежностей система CI запускала тести для бібліотеки.
naderman

composer.lock - це як метадані для файлу composer.json
Кашмірі,

73

composer.lockзаписує точні версії, які встановлені. Щоб ви були в одних версіях зі своїми колегами.

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

  • Перевірте наявність composer.lockфайлу
  • Якщо ні, автоматично згенерувати composer.lockфайл (за допомогою composer update)
  • Встановіть зазначені версії, записані у composer.lockфайлі

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

  • Перегляньте composer.jsonфайл
  • Перевірте наявність нових (найновіших) версій, виходячи із згаданих критеріїв версії (наприклад, 1.12. *)
  • Встановіть останню можливу (відповідно до вище) версію
  • Оновіть composer.lockфайл із встановленими версіями

Тож у простому контрольному списку.

Якщо ви хочете зберегти всіх співробітників у тих самих версіях, що і ви ...

  • Зафіксуйте свій composer.lockGIT (або vcs у вас є)
  • Попросіть інших отримати цю версію composer.lockфайлу
  • Завжди використовуйте composer install для отримання правильних залежностей

Якщо ви хочете оновити системні залежності до нових версій

  • Перевірте специфікацію версії у файлі composer.json.
  • Зробіть a composer update
  • Це змінить composer.lockфайл із найновішими версіями
  • Приєднати його до GIT (або vcs)
  • Попросіть інших отримати його і composer install

Далі буде дуже гарне читання
https://blog.engineyard.com/2014/composer-its-all-about-the-lock-file

Насолоджуйтесь силою composer.lockфайлу!


1
Я також хотів би зазначити, що установка композитора іноді не отримує потрібних версій, коли вони вже встановлені, в якості обхідного шляху їм потрібно видалити папку постачальника та встановити композитор знову, щоб отримати потрібну версію в композиторі. замок. Наприклад, я отримую 4.0.1 замість 4.0.14-beta від мого постачальника після встановлення композитора, я видалив постачальника, а потім знову встановив композитор, тоді я отримав правильну версію 4.0.14-beta
PauAI

4

Суть файлу блокування полягає у записі точних версій, які встановлені, щоб їх можна було перевстановити. Це означає, що якщо у вас є специфікація версії 1. * і ваш колега запустить, composer updateщо встановлює 1.2.4, а потім вводить файл composer.lock, тоді ви composer installотримаєте 1.2.4, навіть якщо 1.3.0 було звільнено. Це гарантує, що всі, хто працює над проектом, мають однакову версію. Детальніше читайте тут Composer: Це все про файл блокування

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