Quais são as diferenças entre atualização e instalação do compositor?

159

Quais são as diferenças entre composer updatee composer install?

Dawlatzai Ghousi
fonte

Respostas:

296

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:

  • Ler composer.json
  • Remova os pacotes instalados que não são mais necessários no composer.json
  • Verifique a disponibilidade das versões mais recentes dos pacotes necessários
  • Instale as versões mais recentes dos seus pacotes
  • Atualização composer.lockpara armazenar a versão dos pacotes instalados

instalação do compositor

composer installnão atualizará nada; apenas instalará todas as dependências conforme especificado no composer.lockarquivo

Em detalhe:

  • Verifique se o composer.lockarquivo existe (se não, execute composer-updatee crie)
  • Ler composer.lockarquivo
  • Instale os pacotes especificados no composer.lockarquivo

Quando 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.

Moppo
fonte
5
Você não descreveu o que será se não tivermos um arquivo de bloqueio e chamarmos a instalação do compositor. Boa descrição btw.
user1954544
1
O importante é que você pode mordê-lo um dia - o arquivo de bloqueio não é recursivo. Se algum pacote tiver dependências definidas livremente e se você conseguir uma cópia limpa de um projeto em uma máquina limpa, ele poderá instalar versões diferentes de dependências aninhadas, o que pode incluir novos bugs ou até mesmo alterar alterações! Especialmente relevante na integração contínua e na construção de servidores. A solução - procure o pacote problemático aninhado e adicione sua versão boa fixa ao json e ao arquivo de bloqueio.
JustAMartin
e composer global updateatualizações dependências em seu repositório global sobre sistema local ( COMPOSER_HOMEvariável env)
Yousha Aleayoub
1
Então, como eu poderia atualizar com segurança um pacote específico em um servidor de produção?
Michel
@ Michel Você deve primeiro executar composer updateno seu sistema local e testar seu aplicativo, depois fazer upload do composer.lock no servidor de produção e executarcomposer install
Amin Shojaei
58

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).

Tim Sheehan
fonte
23

composer install

  1. Se composer.lockexiste.
    • Processa e instala dependências do composer.lockarquivo.
  2. Se composer.locknão não existe.
    • O pacote de processos é instalado a partir de composer.json.
    • Cria o 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 update

  1. Processa dependências do composer.jsonarquivo (instala, atualiza e remove).
  2. Cria ou atualiza o 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

kenorb
fonte
o ponto de instalação 3 do compositor não faz sentido. Se o arquivo .lock já existir, ele será lido e nunca "atualizado". Ele só é criado se ele ainda não existe ..
Ben
@ Ben eu esclareci os pontos, deixe-me saber se eles fazem sentido agora.
Kenorb
3

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

  • Caso contrário, leia o arquivo composer.json para verificar quais dependências precisam ser instaladas
  • Escreva o compositer.lock com as informações do projeto (dependências instaladas)

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

  • O arquivo composer.lock será ignorado
  • as dependências do arquivo composer.json serão instaladas e atualizadas (se uma dependência não estiver instalada, será baixada)

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

  • O arquivo composer.json será modificado automaticamente e a nova dependência será adicionada
  • a dependência será baixada para o projeto

compositor remover

Se você deseja remover uma dependência não utilizada, executaremos simplesmente:

composer remove twig/twig --update-with-dependencies

  • Twig será removido com todas as suas dependências
Mayank Dudakiya
fonte
1

instalação do compositor

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
}

atualização do compositor

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

  • Estamos trabalhando bem hoje com a versão de dependência atual (por exemplo: 1.0.0), mas alguns meses depois, a atualização de dependência (por exemplo: 1.0.1) e possível que tenha algum bug
  • Outro membro da equipe pode ter uma versão de dependência diferente se executada 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.

Phan Van Linh
fonte