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


209

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

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

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

Відповіді:


375

Правильний спосіб зробити це:

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

Я мушу визнати, що прапор тут не зовсім очевидний, що він буде робити.

Оновлення

composer remove jenssegers/mongodb

Станом на v1.0.0-beta2 --update-with-dependencies є типовим і більше не потрібен.


дякую @Yehosef за те, що він почав випуск у Github, де було запропоновано рішення, але оскільки він не оновив свою відповідь, я вирішив написати своє для зручності для кожного
Денис Пшенов

Дякую, я не закінчив їх обговорення.
Лоренц Мейєр

3
Варто зазначити одне: якщо ви вже хотіли composer remove …, але забули, --update-with-dependenciesпоки не натрапите на це питання - наступні дзвінки composer removeне вбиватимуть усіх залежностей. Вам потрібно буде повернутися, композитор install, тодіcomposer remove --update-with-dependencies
Майк Г

Тепер я отримую таке повідомлення: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/isissue/3751
Yehosef

20

наступні команди будуть робити те ж саме

rm -rf vendor

composer install 

2
Це здається найчистішим варіантом. Видаліть каталог постачальників і дозвольте Composer витягти все свіже.
Machavity

4
це npm "save my day" стиль;)
r34

composer installавтоматично видалить невикористані пакети
Ідір

10

Просто запустіть composer install- це зробить ваш vendorкаталог відображенням залежностей у composer.lockфайлі.

Іншими словами - він видалить будь-якого постачальника, якого немає composer.lock.

Будь ласка, оновіть самого композитора, перш ніж це запустити.

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