Eu tenho um projeto com algumas dependências e gostaria de instalar outro, mas gostaria de manter os outros do jeito que são. Então eu editei o composer.json
, mas se eu executar composer install
, recebo a seguinte saída:
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
Primeiro de tudo, eu tenho o mcrypt instalado, então não sei por que está reclamando disso lá.
Então, como posso instalar essa nova dependência?
Meu compositer.json:
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
composer-php
dualidade_
fonte
fonte
Respostas:
Para instalar um novo pacote e somente isso, você tem duas opções:
Usando o
require
comando, basta executar:O Composer irá adivinhar a melhor restrição de versão a ser usada, instalar o pacote e adicioná-lo
composer.lock
.Você também pode especificar uma restrição de versão explícita executando:
-OU-
Usando o
update
comando, adicione o novo pacote manualmente acomposer.json
e execute:Se o Composer reclamar, afirmando "Seus requisitos não puderam ser resolvidos para um conjunto instalável de pacotes.", Você pode resolver isso passando o sinalizador
--with-dependencies
. Isso lista todas as dependências do pacote que você está tentando instalar / atualizar na lista de permissões (mas nenhuma de suas outras dependências).Com relação aos problemas das pessoas que perguntam ao Laravel e ao mcrypt: verifique se ele está ativado corretamente no seu php.ini da CLI. Se
php -m
não listar mcrypt, está faltando.Importante: Não se esqueça de especificar
new/package
ao usarcomposer update
! Omitir esse argumento fará com que todas as dependênciascomposer.lock
sejam atualizadas.fonte
"new/package" : "*",
na"require"
seção composer.json ?Na verdade, a solução correta é:
composer require vendor/package
Retirado da documentação da CLI do Composer :
Embora seja verdade que
composer update
instala novos pacotes encontrados no composer.json, ele também atualiza o arquivo composer.lock e todos os pacotes instalados de acordo com qualquer lógica difusa (>
ou*
caracteres após os dois pontos) encontrados no compositer.json! Isso pode ser evitado usandocomposer update vendor/package
, mas eu não recomendaria criar um hábito, pois você é um argumento esquecido longe de um projeto potencialmente interrompido ...Mantenha as coisas sãs e mantenha-as
composer require vendor/package
para adicionar novas dependências! 😉fonte
composer require
atualização do arquivo composer.lock?Meu caso de uso é mais simples e se encaixa simplesmente no seu título, mas não nos detalhes adicionais.
Ou seja, quero instalar um novo pacote que ainda não esteja no meu
composer.json
sem atualizar todos os outros pacotes.A solução aqui é
composer require x/y
fonte
No meu caso, tive um repo com:
.json
.lock
Enquanto isso, A, B, C tinha versões mais recentes com respeito quando o bloqueio foi gerado.
Por alguma razão, excluí os "fornecedores" e queria fazer um
composer install
e falhei com a mensagem:Tentei executar a solução da Seldaek emitindo um
composer update vendorD/libraryD
compositor, mas insisti em atualizar mais coisas, então.lock
também havia mudanças na minha ferramenta meu git.A solução que usei foi:
vendors
dir.VendorD/LibraryD
do.json
.composer install
..json
e faça o check-out novamente no repositório (equivalente a adicionar novamente o arquivo, mas evitando possíveis alterações de espaço em branco).composer update vendorD/libraryD
Ele instalou a biblioteca, mas, além disso, o
git
diff me mostrou que.lock
apenas as novas coisas foram adicionadas sem editar as outras.(Thnx Seldaek para o ponteiro;))
fonte
composer.lock
nunca deve ser felizmente excluído e reconstruído..lock
é ... para trancar !! ; D - caso contrário, o arquivo de bloqueio seria inútil e você não o confirmaria ou não existiria. Se você administrar uma empresa orientada à qualidade e reconstruir e confirmar um bloqueio com, digamos, 1.000 dependências, todas elas mudarão e o pessoal de controle de qualidade virá para matá-lo, hahaha.