Composer가 라이브러리를 다시 설치하도록 강제하는 방법은 무엇입니까?


96

저는 ZF2 스켈레톤 앱을 사용하고 있으며 외부 라이브러리가 git에 커밋되는 것을 방지하는 .gitignore가 있습니다. 디버깅하는 동안 저는 라이브러리의 소스를 여기저기서 변경하여 작동 방식을 배우는 것을 좋아합니다. 버전이 제어 된 경우 원래 상태로 되 돌리는 것이 매우 쉽습니다.

수정되지 않은 새로운 복사본을 다시 얻을 수 있도록 Composer가 특정 프레임 워크를 다시 설치하도록하려면 어떻게해야합니까?

추신 : 이유가 있기 때문에 .gitignore 파일을 제거하지 마십시오. 내 타사 라이브러리가 내 앱의 저장소에 들어가는 것을 방지합니다. 자동 배포 중에 항상 설치할 수 있습니다.


2
한 가지 옵션은 composer.lock을 삭제 한 다음 composer install을 실행하는 것입니다
vascowhite

답변:


48

--prefer-sourcecomposer 의 플래그를 사용하여 VCS 정보 (사용 가능한 경우)로 외부 패키지를 체크 아웃 할 수 있습니다. 간단히 원래 상태로 되돌릴 수 있습니다. 또한 composer update명령을 실행하면 composer가 로컬에서 변경 한 사항을 감지하고 삭제할 것인지 묻습니다.

.gitignore 파일은 루트 프로젝트 (ZF2 스켈레톤)와 관련되어 있으며 공급 업체 디렉토리 (타사 라이브러리가있는 위치)가 자체 VCS에 커밋하지 못하도록합니다. ignore 파일은 공급 업체의 git repo와 관련이 없습니다.


7
처음에 -prefer-source 제안은 내가 의도 한대로 작동하도록 모든 라이브러리를 제거하고 다시 설치해야한다는 것을 깨달은 다음 composer status -v변경 사항에 대한 정보 를 제공 할 때까지 작동하지 않았습니다 .
Julian

163

공급 업체 폴더를 지우면됩니다.

rm -rf vendor/*

@Loenix, 잠금 해제하십시오.
하프 스톱

7
로컬 캐시가 손상된 경우가있어서 공급 업체 디렉토리를 삭제 한 후에도 끊어진 종속성을 계속 재설치했습니다. composer clearcache그런 경우에 좋은 추가입니다.
okdewit

3
OP가 하나의 패키지 만 다시 설치해야 할 때 작곡가가 모든 패키지를 다시 설치해야한다는 점을 고려하면 이것은 매우 급진적 인 접근 방식으로 보입니다. composer require vendor/packageOP가 원하는 것을 더 적은 시간에 할 것입니다. 나는 너무 많은 사람들 이이 답변에 찬성 투표를 한 것에 조금 놀랐습니다.
frederickjh

composer clearcache가 작동하지 않으면 /home/[username]/.cache 디렉토리를 삭제할 수 있습니다. 다시 다운로드해야합니다. packagist.composer.org 외에도 개인 작곡가 packagist를 사용하고 누군가 새 태그를 추가하지 않고 변경하는 경우 유용합니다.
Neil Davis

2
Composer는 반드시 공급 업체 디렉토리에만 설치되는 것은 아니므로 무거운 접근 방식이라하더라도 모든 상황에서 작동하지 않습니다.
ummdorian

35

vendor/디렉토리의 모든 패키지를 삭제하고 싶지 않았으므로 다음과 같이 처리했습니다.

  1. rm -rf vendor/package-i-messed-up
  2. composer install 다시

4
또는 '작곡가가 공급 업체 / 패키지를 요구함'도 좋을 것입니다.
aarcarr

1
그래도 작동하지 않으면 composer clearcache어떤 이유로 캐시가 손상된 경우 먼저 실행할 수 있습니다 .
Sean the Bean

26

제가 한:

  1. 특정 라이브러리의 폴더를 삭제했습니다.
  2. composer update --prefer-source vendor/library-name

git repo와 함께 라이브러리를 다시 가져옵니다.


그래도 작동하지 않으면 composer clearcache어떤 이유로 캐시가 손상된 경우 먼저 실행할 수 있습니다 .
Sean the Bean


3

@aaracrr 사용자가 다른 답변에 대한 의견에서 지적했듯이 아마도 가장 좋은 대답은 동일한 버전 제약 조건으로 패키지를 다시 요구하는 것입니다.

즉.

composer require vendor/package

또는 버전 제약 지정

composer require vendor/package:^1.0.0

1

어떤 이유로 인해 아무도 강제로 재설치하는 가장 분명하고 직접적인 방법을 제안하지 않았습니다.

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

나를 위해 매력처럼 일하고, 감사합니다 :)
Gucu112
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.