Como instalar uma versão específica do pacote usando o Composer?

343

Estou tentando instalar uma versão específica de um pacote usando o Composer. Eu tentei composer installe composer requireeles estão instalando a versão mais recente do pacote. E se eu quiser uma versão mais antiga?

gdaras
fonte
leia esta resposta stackoverflow.com/questions/15212381/…
KevinOrfas 1/16/16

Respostas:

110

Adicione aspas duplas para usar o operador de sinal de intercalação no número da versão.

composer require middlewares/whoops "^0.4"
Yoann Kergall
fonte
3
Não vejo um momento em que você possa passar o nome e a versão do pacote como dois argumentos separados.
x-yuri
11
@ x-yuri nome do pacote de passagem e versão como argumentos separados funciona para mim usando compositor 1.5.1
bryonbean
Embora tecnicamente essa não seja a resposta "correta" para a pergunta do OP, provavelmente é mais útil para a maioria das pessoas.
Rich Court
19

basta usar o php composer.phar exigir

Por exemplo :

php composer.phar require doctrine/mongodb-odm-bundle 3.0

Também disponível com instalação.

https://getcomposer.org/doc/03-cli.md#require https://getcomposer.org/doc/03-cli.md#install

Aize
fonte
Para o registro, a adição de restrições personalizadas não está disponível com install- somente com require. Se você esperava mudar para uma versão específica e fazer check-in de seu composer.lockarquivo, pode, mas precisaria usá-lo composer requiree reverter a alteração composer.jsonposteriormente.
mindplay.dk
Versão como argumento separado? Isso já estava disponível?
X-yuri
9

Como @alucic mencionado, use:

composer require vendor/package:version

ou você pode usar:

composer update vendor/package:version

Você provavelmente deve revisar esta postagem do StackOverflow sobre as diferenças entre a instalação e a atualização do compositor .

Relacionado à pergunta sobre números de versão, você pode revisar a documentação do Composer nas versões , mas aqui em resumo:

  • Intervalo de versão til ( ~ ) - ~ 1.2.3 é equivalente a> = 1.2.3 < 1.3.0
  • Intervalo de versão de sinal de intercalação ( ^ ) - ^ 1.2.3 é equivalente a> = 1.2.3 < 2.0.0

Portanto, com o Tilde, você receberá atualizações automáticas de patches, mas as versões menor e maior não serão atualizadas. No entanto, se você usar o Caret , obterá patches e versões secundárias, mas não obterá versões principais (que quebram alterações).

A Tilde Version é considerada uma abordagem "mais segura", mas se você estiver usando dependências confiáveis ​​(bibliotecas bem mantidas), não deverá ter problemas com a Caret Version (porque pequenas alterações não devem interromper as alterações.

milan.latinovic
fonte
5

Suponha que você queira instalar o Laravel Collective. Atualmente, está na versão 6.x, mas você deseja a versão 5.8. Você pode executar o seguinte comando:

composer require "laravelcollective/html":"^5.8.0"

Um bom exemplo é mostrado aqui na documentação: https://laravelcollective.com/docs/5.5/html

Jay LampStack
fonte
0

No seu composer.json, você pode colocar:

{
    "require": {
        "vendor/package": "version"
    }
}

Em seguida, execute composer installou composer updateno diretório que contém composer.json. Às vezes, para mim, o compositor é hinky, então eu vou começar composer clear-cache; rm -rf vendor; rm composer.lockantes composer installpara ter certeza de que está recebendo coisas novas.


Obviamente, como as outras respostas apontam, você pode executar o seguinte no terminal:

composer require vendor/package:version

E no versionamento:
- Artigo das versões oficiais do compositor
- Ecosia Search

Reed
fonte