Làm thế nào để loại bỏ các phụ thuộc không sử dụng từ nhà soạn nhạc?


209

Tôi đã cài đặt một gói với trình soạn thảo và nó đã cài đặt nhiều gói khác làm phần phụ thuộc.

Bây giờ tôi gỡ cài đặt gói chính composer remove packageauthor/packagename, nhưng tất cả các phụ thuộc cũ không bị xóa. Tôi mong nhà soạn nhạc dọn dẹp và chỉ giữ các gói được yêu cầu theo composer.jsonvà phụ thuộc của họ.

Làm cách nào tôi có thể buộc nhà soạn nhạc dọn dẹp và xóa tất cả các gói không sử dụng?

Câu trả lời:


374

Cách đúng đắn để làm điều này là:

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

Tôi phải thừa nhận cờ ở đây không hoàn toàn rõ ràng về những gì nó sẽ làm.

Cập nhật

composer remove jenssegers/mongodb

Kể từ v1.0.0-beta2 --update-with-dependencies là mặc định và không còn bắt buộc.


cảm ơn @Yehosef vì đã bắt đầu vấn đề trên github nơi cung cấp giải pháp, nhưng vì anh ấy không cập nhật câu trả lời của mình, tôi đã quyết định viết riêng cho mọi người để thuận tiện
Denis Pshenov

Cảm ơn, tôi đã không kết thúc cuộc thảo luận của họ.
Lorenz Meyer

3
Một điều cần lưu ý: Nếu bạn đã composer remove …, nhưng quên mất --update-with-dependenciescho đến khi bạn vấp phải câu hỏi này - các cuộc gọi tiếp theo composer removesẽ không giết tất cả các phụ thuộc. Bạn sẽ cần phải hoàn nguyên, nhà soạn nhạc install, sau đócomposer remove --update-with-dependencies
Mike G

Bây giờ tôi nhận được thông báo sau: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
Làm thế nào về dọn dẹp sau khi loại bỏ một gói? - Đó là nơi câu trả lời của @LorenzMeyer: Đưa ra câu trả lời composer updatenày cho @LorenzMeyer
Allen Linatoc

29

Trong thực tế, nó rất dễ dàng.

composer update

sẽ làm tất cả điều này cho bạn, nhưng nó cũng sẽ cập nhật các gói khác.

Để xóa gói mà không cập nhật các gói khác, ví dụ cụ thể gói đó trong lệnh:

composer update monolog/monolog

sẽ gỡ monolog/monologgói.

Tuy nhiên, có thể vẫn còn một số thư mục hoặc tệp trống không thể xóa tự động và phải xóa theo cách thủ công.


8
Điều không may về điều này là nó buộc bạn phải cập nhật các gói của mình thay vì chỉ gỡ bỏ các phiên bản cũ. Ví dụ: Nếu tôi có hai gói AAA / aaa ~ 1 và phiên bản BBB / bbb ~ 2 và tôi hiện đang ở phiên bản 1.0 của AAA / aaa và chúng đã phát hành 1.1, khi tôi xóa BBB / bbb, tôi có thể tự động cập nhật là những gì tôi dự định làm ..)
Yehosef 16/2/2015

Bạn đúng rồi. Nếu bạn có một giải pháp tốt hơn, hãy quay lại và đăng nó như một câu trả lời.
Lorenz Meyer

3
Tôi chưa làm - tôi chỉ muốn chỉ ra cho người khác một cạm bẫy của phương pháp này.
Yehosef 16/2/2015

nó thực sự nên là một lá cờ trên bản cài đặt của nhà soạn nhạc .. đại loại như--prune
Yehosef 16/2/2015

1
nếu bạn thích ý tưởng bạn có thể bỏ phiếu cho nó - github.com/composer/composer/issues/3751
Yehosef 16/2/2015

20

các lệnh sau sẽ làm tương tự một cách hoàn hảo

rm -rf vendor

composer install 

2
Đây dường như là lựa chọn sạch nhất. Xóa thư mục nhà cung cấp và để Trình soạn thảo kéo mọi thứ mới.
Machavity

4
đây là phong cách "tiết kiệm trong ngày" của tôi;)
r34

composer installsẽ tự động xóa các gói không sử dụng
Yidir

10

Chỉ cần chạy composer install- nó sẽ làm cho vendorthư mục của bạn phản ánh các phụ thuộc trong composer.locktệp.

Nói cách khác - nó sẽ xóa bất kỳ nhà cung cấp nào còn thiếu composer.lock.

Vui lòng cập nhật chính nhà soạn nhạc trước khi chạy này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.