Làm thế nào để buộc nhà soạn nhạc cài đặt lại một thư viện?


95

Tôi đang sử dụng ứng dụng khung ZF2 và nó có .gitignore ngăn các thư viện bên ngoài được cam kết với git. Trong khi gỡ lỗi, tôi muốn đi và thay đổi nội dung ở đây và ở đó trong nguồn của thư viện để tìm hiểu cách mọi thứ hoạt động. Nếu chúng được kiểm soát phiên bản, sẽ rất dễ dàng để hoàn nguyên chúng về trạng thái ban đầu.

Làm cách nào để buộc Composer cài đặt lại một khuôn khổ cụ thể để tôi có thể nhận lại một bản sao mới được sửa đổi?

Tái bút: Vui lòng không đề xuất xóa tệp .gitignore vì nó có lý do; nó ngăn không cho thư viện bên thứ ba của tôi vào kho ứng dụng của tôi. Tôi luôn có thể cài đặt chúng trong quá trình triển khai tự động.


2
Một lựa chọn sẽ được composer.lock xóa và sau đó chạy cài đặt nhà soạn nhạc
vascowhite

Câu trả lời:


48

Bạn có thể sử dụng --prefer-sourcecờ cho nhà soạn nhạc để kiểm tra các gói bên ngoài với thông tin VCS (nếu có). Bạn chỉ cần hoàn nguyên về trạng thái ban đầu. Ngoài ra, nếu bạn phát hành composer updatelệnh, trình soạn thảo lệnh sẽ phát hiện bất kỳ thay đổi nào bạn đã thực hiện cục bộ và hỏi bạn có muốn loại bỏ chúng hay không.

Tệp .gitignore của bạn có liên quan đến dự án gốc của bạn (khung ZF2) và nó ngăn không cho nhà cung cấp (nơi đặt tài khoản bên thứ ba của bạn) cam kết với VCS của riêng bạn. Tệp bỏ qua không liên quan đến git repo của các nhà cung cấp của bạn.


7
Ban đầu, đề xuất -prefer-source của bạn không hoạt động cho đến khi tôi nhận ra rằng tôi phải xóa và cài đặt lại tất cả các thư viện để nó hoạt động như tôi dự định và sau đó composer status -vcung cấp cho tôi thông tin với các thay đổi.
Julian

162

Chỉ cần xóa thư mục nhà cung cấp của bạn

rm -rf vendor/*

@Loenix, hãy mở khóa chúng.
Hiệp

7
Tôi đã gặp trường hợp bộ nhớ cache cục bộ bị hỏng, vì vậy ngay cả sau khi xóa thư mục nhà cung cấp, tôi vẫn tiếp tục cài đặt lại phần phụ thuộc bị hỏng. composer clearcachelà một bổ sung tốt trong những trường hợp như vậy.
okdewit

3
Đây có vẻ như là một cách tiếp cận rất triệt để khi xem xét rằng nhà soạn nhạc sau đó cần phải cài đặt lại tất cả các gói khi OP chỉ cần một gói được cài đặt lại. composer require vendor/packagesẽ làm những gì OP muốn và trong thời gian ngắn hơn. Tôi hơi ngạc nhiên khi rất nhiều người đã bỏ phiếu cho câu trả lời này.
frederickjh

nếu trình soạn thảo clearcache không hoạt động, bạn có thể xóa thư mục /home/[username]/.cache. Điều đó sẽ buộc phải tải xuống lại. Hữu ích nếu bạn sử dụng packagist của nhà soạn nhạc riêng, ngoài packagist.composer.org và ai đó thực hiện thay đổi mà không cần thêm thẻ mới.
Neil Davis

2
Composer không nhất thiết chỉ cài đặt trong thư mục của nhà cung cấp, vì vậy ngay cả khi là một cách tiếp cận nặng, nó không hoạt động trong mọi tình huống.
ummdorian

34

Tôi không muốn xóa tất cả các gói trong vendor/thư mục, vì vậy đây là cách tôi thực hiện:

  1. rm -rf vendor/package-i-messed-up
  2. composer install lần nữa

4
hoặc 'nhà soạn nhạc yêu cầu nhà cung cấp / package-i-messed-up' cũng sẽ tốt
aarcarr

1
Nếu cách đó không hiệu quả, bạn có thể chạy composer clearcachetrước trong trường hợp bộ nhớ cache bị hỏng vì lý do nào đó.
Sean the Bean

26

Tôi đã làm gì:

  1. Đã xóa thư mục của thư viện cụ thể đó
  2. composer update --prefer-source vendor/library-name

Nó tìm nạp lại thư viện cùng với git repo của nó


Nếu cách đó không hiệu quả, bạn có thể chạy composer clearcachetrước trong trường hợp bộ nhớ cache bị hỏng vì lý do nào đó.
Sean the Bean


3

Như người dùng @aaracrr đã chỉ ra trong một nhận xét về một câu trả lời khác, có lẽ câu trả lời tốt nhất là yêu cầu lại gói có cùng phiên bản ràng buộc.

I E.

composer require vendor/package

hoặc chỉ định ràng buộc phiên bản

composer require vendor/package:^1.0.0

1

Vì một số lý do không ai đề xuất cách rõ ràng và dễ hiểu nhất để buộc cài đặt lại:

> composer remove vendor-name/package-name && composer vendor-name/package-name

Làm việc như một cái duyên đối với tôi, cảm ơn bạn :)
Gucu112
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.