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


210

Я установил пакет с помощью composer, и он установил многие другие пакеты как зависимости.

Теперь я удалил основной пакет с composer remove packageauthor/packagename, но все старые зависимости не были удалены. Я ожидал, что composer очистит и сохранит только те пакеты, которые требуются в соответствии с composer.jsonих зависимостями.

Как заставить composer очистить и удалить все неиспользуемые пакеты?

Ответы:


377

Правильный способ сделать это:

composer remove jenssegers/mongodb --update-with-dependencies

Я должен признать, что флаг здесь не совсем очевидно относительно того, что он будет делать.

Обновить

composer remove jenssegers/mongodb

Начиная с версии 1.0.0-бета2 --update-with-dependencies это значение по умолчанию и больше не требуется.


спасибо @Yehosef за начало проблемы на github, где было предоставлено решение, но так как он не
— обновил

Спасибо, я не получил конец их обсуждения.
— Лоренц Мейер

3
Одно замечание: если вы уже сделали composer remove …это, но забыли, --update-with-dependenciesпока не наткнетесь на этот вопрос - последующие вызовы composer removeне убьют все зависимости. Вам нужно будет вернуться, композитор install, а затемcomposer remove --update-with-dependencies
— Майк G

Теперь я получаю следующее сообщение:You are using the deprecated option "update-with-dependencies". This is now default behaviour. The --no-update-with-dependencies option can be used to remove a package without its dependencies
— Pathros

4
Как насчет очистки после удаления пакета? - Вот здесь и ответ @LorenzMeyer: большие composer updateпальцы на этот ответ @LorenzMeyer
— Аллен Линаток

29

На самом деле это очень просто.

composer update

сделает все это за вас, но также обновит другие пакеты.

Чтобы удалить пакет без обновления других, укажите этот пакет в команде, например:

composer update monolog/monolog

удалит monolog/monologпакет.

Тем не менее, могут остаться некоторые пустые папки или файлы, которые не могут быть удалены автоматически, и которые должны быть удалены вручную.


8
К сожалению, это заставляет вас обновлять пакеты, а не просто удалять старые версии. Например, если у меня есть два пакета AAA / aaa ~ 1 и версия BBB / bbb ~ 2, и я в настоящее время нахожусь в версии 1.0 AAA / aaa, и они выпустили 1.1, то, когда я удаляю BBB / bbb, я автоматически обновляюсь (который может не будь то, что я собирался сделать ..)
— Yehosef

Ты прав. Если у вас есть лучшее решение, вернитесь и опубликуйте его как ответ.
— Лоренц Мейер

3
Пока не знаю - я просто хочу указать другим на ловушку такого подхода.
— Yehosef

это действительно должен быть флаг при установке композитора .. что-то вроде--prune
— Yehosef

1
если вам нравится идея, вы можете проголосовать за нее - github.com/composer/composer/issues/3751
— Yehosef

20

Следующие команды будут делать то же самое отлично

rm -rf vendor

composer install 

2
Это, кажется, самый чистый вариант. Удалите каталог vendors и позвольте Composer получить все заново.
— Мачавити

4
это
— r34

composer installавтоматически удалит неиспользованные пакеты
— Yidir

10

Просто запустите composer install- это заставит ваш vendorкаталог отражать зависимости в composer.lockфайле.

Другими словами - он удалит любого поставщика, который отсутствует в composer.lock.

Пожалуйста, обновите сам композитор перед запуском этого.

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