Como atualizar uma única biblioteca com o Composer?

311

Eu preciso instalar apenas 1 pacote para minha distribuição SF2 (DoctrineFixtures).

Quando eu corro

php composer.phar update

eu recebo

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

Parece que o último desenvolvedor editou muitos arquivos dentro do fornecedor.

Para contornar isso, tentei

php composer.phar update <package_name>

Mas isso não parece funcionar. Como posso atualizar / instalar apenas uma biblioteca do compositer.json?

Ferramenta
fonte
Você está usando o comando certo. Você pode nos mostrar o seu composer.json?
cheesemacfly
por favor tente com os comandos fornecidos na minha resposta de outra forma, por favor fornecer uma descrição do erro que você começa (saída compositor ou seja, se o compositor está reclamando)
Nicolai Fröhlich
Seu compositer.json pode se referir a uma bifurcação alternativa de um projeto.
Iconoclast
Atualizei uma dependência específica no meu projeto laravel e especificando o componente específico para instalar explicitamente: atualização do compositor laravelcollective / html. Isso pareceu funcionar.
Marko

Respostas:

526

Para instalar doctrine/doctrine-fixtures-bundlecom versão 2.1.*e estabilidade mínima, @devuse este:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

para atualizar apenas este pacote único:

composer.phar update doctrine/doctrine-fixtures-bundle
Nicolai Fröhlich
fonte
9
Podem ser úteis: correndo atualizar / instalar com -vvv (verbose modo: composer.phar atualização -vvv pacote / pacote) às vezes pode ser melhor como, ocasionalmente, um prompt interativo aparecerá que pode ser de outra forma oculta
timhc22
1
E se houver erros em outros pacotes? (No meu caso, a instalação parou).
Thomas Decaux
2
E o requisito aciona uma atualização de um pacote diferente?
hakre
1
o que exatamente você gostaria de saber? você pode ser mais específico, por favor? Deseja saber se pode acontecer que outro pacote - explicitamente requireantes ou baixado anteriormente como dependência - seja atualizado automaticamente ao executar o composer require <package>:<version-constraint>@<stability-flag>comando?
Nicolai Fröhlich
7
> composer.phar update doctrine / doctrine-fixtures-bundle também atualiza todos os outros pacotes (((
podarok
184

Se você deseja atualizar apenas alguns pacotes e não todos, é possível listá-los da seguinte forma:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

Você também pode usar curingas para atualizar vários pacotes de uma vez:

php composer.phar update vendor/*
  • --prefer-source : instala pacotes a partir de sourcequando disponíveis.
  • --prefer-dist : instala pacotes a partir de distquando disponíveis.
  • --ignore-Platform-reqs : ignorar php, hhvm, lib-*e ext-*exigências e forçar a instalação, mesmo que a máquina local não cumprir estes. Veja também a platform opção de configuração .
  • --dry-run : simula o comando sem realmente fazer nada.
  • --dev : instala os pacotes listados em require-dev(este é o comportamento padrão).
  • --no-dev : ignora a instalação dos pacotes listados em require-dev. A geração do carregador automático ignora as autoload-devregras.
  • --no-autoloader : ignora a geração do carregador automático.
  • --no-scripts : ignora a execução dos scripts definidos em composer.json.
  • --no-plugins : desativa plugins.
  • --no-progress : Remove a exibição de progresso que pode interferir em alguns terminais ou scripts que não manipulam caracteres de backspace.
  • --optimize-autoloader (-o) : converte o carregamento automático PSR-0/4 em mapa de classe para obter um carregador automático mais rápido. Isso é recomendado especialmente para produção, mas pode demorar um pouco para ser executado, portanto, atualmente não é feito por padrão.
  • --lock : atualiza apenas o hash do arquivo de bloqueio para suprimir o aviso de que o arquivo de bloqueio está desatualizado.
  • --with-dependencies : adicione também todas as dependências de pacotes na lista de permissões.
  • --prefer-estável : Prefere versões estáveis de dependências.
  • --prefer-lower : prefere as versões mais baixas das dependências. Útil para testar versões mínimas de requisitos, geralmente usadas com --prefer-stable.
Yosvel Quintero Arguelles
fonte
Observe que os usuários do ZSH podem precisar incluir vendor/*aspas:composer update "vendor/*"
ZeroThe2nd
51

Diferença entre instalar, atualizar e exigir

Suponha o seguinte cenário:

compositer.json

"parsecsv/php-parsecsv": "0.*"

arquivo composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

Última versão é 1.1.0. A 0.*versão mais recente é0.3.2

instalar: composer install parsecsv/php-parsecsv

Isso instalará a versão 0.1.4conforme especificado no arquivo de bloqueio

atualizar: composer update parsecsv/php-parsecsv

Isso atualizará o pacote para 0.3.2. A versão mais alta em relação ao seu compositer.json. A entrada composer.lockserá atualizada.

exigir: composer require parsecsv/php-parsecsv

Isso atualizará ou instalará a versão mais recente 1.1.0. Seu composer.lockarquivo e seu composer.jsonarquivo também serão atualizados.

Adão
fonte
incríveis, portanto, para atualizar um pacote dentro a versão restrita é composer update author/packagee depoiscomposer install author/package
William Randokun
@WilliamRandokun se você instalou-lo antes, então só composer update packageé o suficiente, não há necessidade de chamar instalar depois
Adam
1
exatamente o que estou procurando. bem explicado. upvoted
Kapitan
15

Basicamente, você pode seguir um para instalar o novo pacote também.

php composer.phar require

o terminal solicitará que você digite o nome do pacote para pesquisa.

$ Search for a package []: //Your package name here

O terminal perguntará a versão do pacote (se você quiser ter a versão mais recente, deixe em branco)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

Então você apenas pressiona a tecla Enter. O Terminal solicitará outro pacote, se você não quiser instalar outro, basta pressionar a tecla Enter e pronto.

orhankutlu
fonte
6

Você pode usar o seguinte comando para atualizar qualquer módulo com suas dependências

composer update vendor-name/module-name --with-dependencies
Wolfack
fonte
5

Para garantir que o compositor atualize um pacote já instalado para a última versão, dentro das restrições de versão definidas em composer.json, remova o pacote do fornecedor e execute:

php composer.phar update vendor/package
Tsounabe
fonte
4
Você encontrará a mesma sugestão neste post: github.com/composer/composer/issues/3112 . PS: Voto sem explicação é tão fácil e inútil.
Tsounabe 27/10/16
5

Apenas use

composer require {package/packagename}

gostar

composer require phpmailer/phpmailer

se o pacote não estiver na pasta do fornecedor .. o composer o instala e, se o pacote existir, atualize o pacote para a última versão.

Mostafa
fonte
2

Como você queria instalar um pacote específico "Eu preciso instalar apenas 1 pacote para minha distribuição SF2 (DoctrineFixtures)".

php composer.phar require package/package-name:package-version seria o suficiente

The Anh
fonte