Як змусити композитора перевстановити бібліотеку?


97

Я використовую додаток скелета ZF2, і він має .gitignore, який запобігає комітуванню зовнішніх бібліотек у git. Під час налагодження я люблю ходити і міняти речі тут і там у джерелі бібліотек, щоб дізнатись, як все працює. Якби вони контролювалися версіями, було б дуже легко повернути їх у початковий стан.

Як я можу змусити Composer переінсталювати певний фреймворк, щоб я міг знову отримати нову-немодифіковану копію?

PS: Будь ласка, не пропонуйте видаляти файл .gitignore, оскільки він є там з причини; це перешкоджає потраплянню моїх сторонніх бібліотек у сховище мого додатка. Я завжди можу встановити їх під час автоматичного розгортання.


2
Одним із варіантів було б видалити composer.lock, а потім запустити установку композитора
vascowhite

Відповіді:


48

Ви можете використовувати --prefer-sourceпрапор для композитора, щоб перевірити зовнішні пакети з інформацією VCS (якщо такі є). Ви можете просто повернутися до початкового стану. Крім того, якщо ви видасте composer updateкоманду, композитор виявить будь-які внесені вами зміни локально та запитає, чи хочете ви їх відхилити.

Ваш файл .gitignore пов’язаний з вашим кореневим проектом (скелет ZF2), і він заважає директорією постачальника (де знаходяться ваші сторонні бібліотеки) здійснювати прив'язку до вашого власного VCS. Файл ігнорування не пов'язаний з репозиторіями git ваших постачальників.


7
Спочатку ваша пропозиція -prefer-source не працювала, поки я не зрозумів, що мені потрібно видалити та переінсталювати всі бібліотеки, щоб це працювало так, як я задумав, а потім composer status -vнадав мені інформацію зі змінами.
Джуліан

167

Просто очистіть папку постачальників

rm -rf vendor/*

@Loenix, розблокуй їх.
Halfstop

7
У мене були випадки, коли локальний кеш був пошкоджений, тому навіть після видалення каталогу постачальника я продовжував перевстановлювати зламану залежність. composer clearcacheє хорошим доповненням у таких випадках.
okdewit

3
Це здається дуже радикальним підходом, враховуючи, що композитору тоді потрібно перевстановити всі пакети, коли операційній програмі потрібно лише перевстановити один пакет. composer require vendor/packageзробить те, що хоче ОП, і за менший час. Я трохи здивований, що так багато людей проголосували за цю відповідь.
frederickjh

якщо composer clearcache не працює, ви можете видалити каталог /home/[username]/.cache. Це змусить повторно завантажити. Корисно, якщо ви використовуєте приватний композитор-пакувальник, на додаток до Packagist.composer.org, і хтось вносить зміни, не додаючи новий тег.
Ніл Девіс,

2
Композитор не обов'язково встановлювати лише у каталозі постачальників, тому навіть як жорсткий підхід він працює не у всіх ситуаціях.
ummdorian

36

Я не хотів видаляти всі пакунки в vendor/каталозі, тому ось як я це зробив:

  1. rm -rf vendor/package-i-messed-up
  2. composer install знову

4
або "композитору потрібен постачальник / пакет-я-переплутаний" теж було б непогано
aarcarr

1
Якщо це не спрацює, ви можете запустити composer clearcacheспочатку, якщо кеш з якихось причин пошкоджений.
Шон Бін

26

Що я зробив:

  1. Видалено папку цієї бібліотеки
  2. composer update --prefer-source vendor/library-name

Він знову отримує бібліотеку разом із git repo


Якщо це не спрацює, ви можете запустити composer clearcacheспочатку, якщо кеш з якихось причин пошкоджений.
Шон Бін


3

Як зазначив користувач @aaracrr у коментарі до іншої відповіді, мабуть, найкращою відповіддю є повторне вимагання пакету з тим самим обмеженням версії.

тобто

composer require vendor/package

або зазначення обмеження версії

composer require vendor/package:^1.0.0

1

Чомусь ніхто не запропонував очевидний і найпростіший спосіб змусити перевстановити:

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