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


102

Я использую скелетное приложение ZF2, и у него есть файл .gitignore, который предотвращает привязку внешних библиотек к git. Во время отладки мне нравится менять кое-что в исходном коде библиотек, чтобы узнать, как все работает. Если бы они контролировались версиями, их было бы очень легко вернуть в исходное состояние.

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

PS: Пожалуйста, не предлагайте удалять файл .gitignore, поскольку он существует по какой-то причине; он предотвращает попадание моих сторонних библиотек в репозиторий моего приложения. Я всегда могу установить их во время автоматического развертывания.


2
Один из вариантов - удалить composer.lock, а затем запустить composer install
vascowhite,

Ответы:


50

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

Ваш файл .gitignore связан с вашим корневым проектом (скелет ZF2) и предотвращает фиксацию директории поставщика (где находятся ваши сторонние библиотеки) в вашу собственную VCS. Файл игнорирования не связан с репозиториями git ваших поставщиков.


7
Первоначально ваше предложение -prefer-source не работало, пока я не понял, что мне нужно удалить и переустановить все библиотеки, чтобы это работало так, как я планировал, а затем composer status -vпредоставил мне информацию с изменениями.
Julian

172

Просто очистите папку поставщиков

rm -rf vendor/*

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

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

4
Это кажется очень радикальным подходом, учитывая, что композитор затем должен переустановить все пакеты, когда OP требует переустановки только одного пакета. composer require vendor/packageсделает то, что хочет ОП, и за меньшее время. Я немного удивлен, что так много людей поддержали этот ответ.
frederickjh

если композитор clearcache не работает, вы можете удалить каталог /home/[usernamepting/.cache. Это приведет к повторной загрузке. Полезно, если вы используете private composer packagist в дополнение к packagist.composer.org, и кто-то вносит изменения без добавления нового тега.
Нил Дэвис,

2
Composer не обязательно устанавливается только в каталог поставщика, поэтому даже при жестком подходе он работает не во всех ситуациях.
ummdorian

39

Я не хотел удалять все пакеты в vendor/каталоге, поэтому вот как я это сделал:

  1. rm -rf vendor/package-i-messed-up
  2. composer install еще раз

4
или 'composer require vendor / package-i-messed-up' тоже было бы хорошо
aarcarr

1
Если это не сработает, вы можете запустить composer clearcacheсначала, если кеш по какой-то причине был поврежден.
Шон Бин,

27

Что я сделал:

  1. Удалена папка этой конкретной библиотеки
  2. composer update --prefer-source vendor/library-name

Он снова загружает библиотеку вместе с репозиторием git


Если это не сработает, вы можете запустить composer clearcacheсначала, если кеш по какой-то причине был поврежден.
Шон Боб


3

Как указал пользователь @aaracrr в комментарии к другому ответу, вероятно, лучший ответ - повторно потребовать пакет с тем же ограничением версии.

т.е.

composer require vendor/package

или указав ограничение версии

composer require vendor/package:^1.0.0

2

Почему-то никто не предложил очевидного и наиболее простого способа принудительной переустановки:

> composer remove vendor-name/package-name && composer vendor-name/package-name
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.