Como forçar o composer a reinstalar uma biblioteca?


96

Estou usando o aplicativo de esqueleto ZF2 e ele tem um .gitignore que impede que bibliotecas externas sejam enviadas para o git. Durante a depuração, gosto de mudar algumas coisas aqui e ali no código-fonte das bibliotecas para aprender como as coisas funcionam. Se estes fossem controlados por versão, seria muito fácil revertê-los de volta ao seu estado original.

Como posso forçar o Composer a reinstalar uma estrutura específica para que eu possa obter uma cópia -não modificada- novamente?

PS: Não sugira remover o arquivo .gitignore, pois ele está lá por um motivo; ele impede que minhas bibliotecas de terceiros entrem no repositório do meu aplicativo. Sempre posso instalá-los durante uma implantação automatizada.


2
Uma opção seria excluir composer.lock e executar composer install
— vascowhite

Respostas:


48

Você pode usar o --prefer-sourcesinalizador do composer para fazer check-out de pacotes externos com as informações VCS (se houver alguma disponível). Você pode simplesmente voltar ao estado original. Além disso, se você emitir o composer updatecomando composer irá detectar todas as mudanças feitas localmente e perguntar se você deseja descartá-las.

Seu arquivo .gitignore está relacionado ao seu projeto raiz (esqueleto ZF2) e evita que o diretório do fornecedor (onde estão as bibliotecas de terceiros) se comprometa com seu próprio VCS. O arquivo ignore não está relacionado ao repositório git de seus fornecedores.


7
Inicialmente, sua sugestão -prefer-source não funcionou até que percebi que tinha que remover e reinstalar todas as bibliotecas para que funcionasse como pretendia e, em seguida, composer status -vme deu as informações com as alterações.
— Juliano

163

Basta limpar a pasta de fornecedores

rm -rf vendor/*

@Loenix, desbloqueie-os.
— Meia parada

7
Já tive casos em que o cache local foi corrompido, então, mesmo depois de excluir o diretório do fornecedor, continuei reinstalando uma dependência quebrada. composer clearcacheé um bom complemento em tais casos.
— okdewit

3
Esta parece ser uma abordagem muito radical, considerando que o composer então precisa reinstalar todos os pacotes quando o OP precisa apenas de um pacote reinstalado. composer require vendor/packagefará o que o OP deseja e em menos tempo também. Estou um pouco surpreso que tantos tenham votado a favor desta resposta.
— frederickjh

se composer clearcache não funcionar, você pode excluir o diretório /home/[username]/.cache. Isso forçará um novo download. Útil se você usar packagist do compositor privado, além de packagist.composer.org, e alguém fizer alterações sem adicionar uma nova tag.
— Neil Davis

2
O Composer não instala necessariamente apenas no diretório do fornecedor, portanto, mesmo sendo uma abordagem pesada, ele não funciona em todas as situações.
— ummdorian

35

Eu não queria excluir todos os pacotes do vendor/diretório, então aqui está como fiz:

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

4
ou 'composer require vendor / package-i-messed-up' também seria bom
— aarcarr

1
Se isso não funcionar, você pode executar composer clearcacheprimeiro, caso o cache tenha sido corrompido por algum motivo.
— Sean the Bean

26

O que eu fiz:

  1. Excluiu a pasta daquela biblioteca específica
  2. composer update --prefer-source vendor/library-name

Ele busca a biblioteca novamente junto com seu git repo


Se isso não funcionar, você pode executar composer clearcacheprimeiro, caso o cache tenha sido corrompido por algum motivo.
— Sean the Bean


3

Como o usuário @aaracrr apontou em um comentário sobre outra resposta, provavelmente a melhor resposta é exigir novamente o pacote com a mesma restrição de versão.

ie.

composer require vendor/package

ou especificando uma restrição de versão

composer require vendor/package:^1.0.0

1

Por alguma razão, ninguém sugeriu a maneira óbvia e mais direta de forçar a reinstalação:

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

Funcionando como um encanto para mim, obrigado :)
— Gucu112
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.