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

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сначала, если кеш по какой-то причине был поврежден.
Шон Боб
9

Переустановите зависимости. Удалите папку vendor (вручную) или с помощью команды rm (если вы находитесь в папке проекта, обязательно) в Linux перед:

rm -rf vendor/

composer update -v

https://www.dev-metal.com/composer-problems-try-full-reset/

Абдалхади Альсаяд
источник
3

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

т.е.

composer require vendor/package

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

composer require vendor/package:^1.0.0
Frederickjh
источник
2

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

> composer remove vendor-name/package-name && composer vendor-name/package-name
Евгений
источник