Quais são as diferenças entre composer updatee composer install?
Quais são as diferenças entre composer updatee composer install?
Respostas:
atualização do compositor
composer update atualizará suas dependências conforme especificadas em composer.json
Por exemplo, se você precisar deste pacote como uma dependência:
"mockery/mockery": "0.9.*",
e você realmente instalou a 0.9.1versão do pacote, a execução composer updatecausará uma atualização deste pacote (por exemplo 0.9.2, se já tiver sido lançado)
em detalhes composer update:
composer.jsoncomposer.jsoncomposer.lockpara armazenar a versão dos pacotes instaladosinstalação do compositor
composer installnão atualizará nada; apenas instalará todas as dependências conforme especificado no composer.lockarquivo
Em detalhe:
composer.lockarquivo existe (se não, execute composer-updatee crie)composer.lockarquivocomposer.lockarquivoQuando instalar e quando atualizar
composer updateé usado principalmente na 'fase de desenvolvimento', para atualizar nossos pacotes de projetos de acordo com o que especificamos no composer.jsonarquivo,
composer install é usado principalmente na 'fase de implementação' para instalar nosso aplicativo em um servidor de produção ou em um ambiente de teste, usando as mesmas dependências armazenadas no arquivo composer.lock criado pela atualização do compositor.
composer global updateatualizações dependências em seu repositório global sobre sistema local ( COMPOSER_HOMEvariável env)
composer updateno seu sistema local e testar seu aplicativo, depois fazer upload do composer.lock no servidor de produção e executarcomposer install
Quando você executa, composer installele procura um arquivo de bloqueio e instala o que estiver contido nele, se não conseguir encontrar um, ele lerá composer.json, instalará suas dependências e gerará um arquivo de bloqueio.
Quando você executa, composer updateele simplesmente lê composer.json, instala as dependências e atualiza o arquivo de bloqueio (ou cria um novo arquivo de bloqueio).
composer installcomposer.lockexiste.
composer.lockarquivo.composer.locknão não existe.
composer.json.composer.lockarquivo com base nos pacotes instalados.Conforme composer help install:
O comando install lê o
composer.lockarquivo do diretório atual, processa-o, baixa e instala todas as bibliotecas e dependências descritas nesse arquivo. Se o arquivo não existir, ele procurarácomposer.jsone fará o mesmo.
composer updatecomposer.jsonarquivo (instala, atualiza e remove).composer.lockarquivo de acordo com as alterações.Conforme composer help update:
O comando update lê o
composer.jsonarquivo do diretório atual, processa-o e atualiza, remove ou instala todas as dependências.
Veja também: Compositor: tudo sobre o arquivo de bloqueio
A melhor diferença entre composer updateecomposer install
instalação do compositor
Para adicionar dependências, você precisa adicioná-lo manualmente ao arquivo composer.json.
Se o arquivo composer.lock existir, instale exatamente o que está especificado nesse arquivo
Nenhum componente será atualizado com este comando.
atualização do compositor
Para adicionar ou remover dependências, você deve adicioná-lo manualmente ao arquivo composer.json
Se você não pode (ou não sabe como adicionar ou remover uma biblioteca que é de fato fácil, basta adicionar o nome da dependência e da versão na propriedade requerida do arquivo) modificar o arquivo composer.json manualmente ou você prefira usar a linha de comando, o compositor possui funções especiais para isso:
compositor exige
Por exemplo, se queremos adicionar uma dependência com a linha de comando, simplesmente executaremos
composer require twig/twig
compositor remover
Se você deseja remover uma dependência não utilizada, executaremos simplesmente:
composer remove twig/twig --update-with-dependencies
if(composer.lock existed){
installs dependency with EXACT version in composer.lock file
} else {
installs dependency with LATEST version in composer.json
generate the composer.lock file
}
composer update = remove composer.lock -> composer install
Por que precisamos de 2 comandos. Eu acho que isso pode explicar pelo compositor.lock.
Imagine, nós não temos composer.locke dentro composer.json, há uma dependência "monolog/monolog": "1.0.*"ou "monolog/monolog": "^1.0".
Então, terá alguns casos
composer installem um horário diferente.E se sempre usarmos uma versão EXATA composer.jsoncomo "monolog/monolog": "1.0.1"?
Ainda precisamos composer.lockporque, composer.jsonapenas rastreamos a versão principal da sua dependência, ele não pode rastrear a versão das dependências da dependência.
E se todas as dependências da dependência também usarem a versão EXACT?
Imagine que você começa com TODAS as dependências que usam a versão EXACT e não se importa composer.lock. No entanto, alguns meses depois, você adiciona uma nova dependência (ou atualiza uma dependência antiga) e as dependências dessa dependência não usam a versão EXACT. Então é melhor cuidar composer.lockdo começo.
Além disso, há uma vantagem de uma versão semântica sobre uma versão exata. Podemos atualizar a dependência várias vezes durante o desenvolvimento e a biblioteca geralmente apresenta algumas pequenas alterações, como a correção de bugs. Então é mais fácil atualizar a dependência, que usa a versão semântica.