¿Cómo actualizar una biblioteca individual con Composer?

312

Necesito instalar solo 1 paquete para mi distribución SF2 (DoctrineFixtures).

Cuando corro

php composer.phar update

yo obtengo

  - 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 el último desarrollador editó muchos archivos dentro del proveedor.

Para evitar esto, intenté

php composer.phar update <package_name>

Pero eso no parece funcionar. ¿Cómo puedo actualizar / instalar solo una biblioteca de composer.json?

Herramienta
fuente
Estás utilizando el comando correcto. ¿Nos puede mostrar su composer.json?
cheesemacfly
intente con los comandos proporcionados en mi respuesta; de lo contrario, proporcione una descripción del error que obtiene (es decir, salida del compositor si el compositor se queja)
Nicolai Fröhlich
Su composer.json puede referirse a una bifurcación alternativa de un proyecto.
iconoclasta
Actualicé una dependencia específica en mi proyecto laravel y especificando el componente específico para instalar explícitamente: composer update laravelcollective / html. Eso pareció funcionar.
marko

Respuestas:

527

Para instalar doctrine/doctrine-fixtures-bundlecon versión 2.1.*y estabilidad mínima, @devuse esto:

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

luego para actualizar solo este paquete único:

composer.phar update doctrine/doctrine-fixtures-bundle
Nicolai Fröhlich
fuente
99
Puede ser útil: ejecutar update / install con -vvv (modo detallado: composer.phar update -vvv package / package) a veces puede ser mejor ya que ocasionalmente aparece un mensaje interactivo que de otra manera podría estar oculto
timhc22
1
¿Qué pasa si hay errores en otros paquetes? (En mi caso, la instalación se detuvo).
Thomas Decaux
2
¿Qué pasa con el require desencadena una actualización de un paquete diferente?
Hakre
1
¿Qué es exactamente lo que te gustaría saber? ¿puedes ser más específico por favor? ¿Desea saber si podría ocurrir que otro paquete, explícitamente requireantes o previamente descargado como una dependencia, se actualizara automáticamente al ejecutar el composer require <package>:<version-constraint>@<stability-flag>comando?
Nicolai Fröhlich
77
> composer.phar update doctrine / doctrine-fixtures-bundle esto también actualiza todos los demás paquetes (((
podarok
184

Si solo desea actualizar algunos paquetes y no todos, puede enumerarlos como tales:

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

También puede usar comodines para actualizar varios paquetes a la vez:

php composer.phar update vendor/*
  • --prefer-source : instala paquetes desde sourcecuando estén disponibles.
  • --prefer-dist : instala paquetes desde distcuando estén disponibles.
  • --ignore-plataforma-reqs : ignoran php, hhvm, lib-*y ext-*los requisitos y forzar la instalación, incluso si el equipo local no cumple con estos. Ver también la platform opción de configuración .
  • --dry-run : simula el comando sin hacer nada.
  • --dev : instala los paquetes enumerados en require-dev(este es el comportamiento predeterminado).
  • --no-dev : Omita los paquetes de instalación enumerados en require-dev. La generación del cargador automático omite las autoload-devreglas.
  • --no-autoloader : omite la generación del autocargador.
  • --no-scripts : omite la ejecución de scripts definidos en composer.json.
  • --no-plugins : deshabilita los complementos.
  • --no-progress : elimina la pantalla de progreso que puede interferir con algunos terminales o scripts que no manejan caracteres de retroceso.
  • --optimize-autoloader (-o) : Convierta la carga automática de PSR-0/4 en mapa de clase para obtener un cargador automático más rápido. Esto se recomienda especialmente para la producción, pero puede tardar un poco en ejecutarse, por lo que actualmente no se realiza de forma predeterminada.
  • --lock : solo actualiza el hash del archivo de bloqueo para suprimir la advertencia de que el archivo de bloqueo no está actualizado.
  • --with-dependencies : agrega también todas las dependencias de los paquetes de la lista blanca a la lista blanca.
  • --prefer-stable : prefiere versiones estables de dependencias.
  • --prefer-lower : prefiere las versiones más bajas de dependencias. Útil para probar versiones mínimas de requisitos, generalmente utilizados con --prefer-stable.
Yosvel Quintero Argüelles
fuente
Tenga en cuenta que los usuarios de ZSH pueden necesitar incluir sus vendor/*comillas:composer update "vendor/*"
ZeroThe2nd
51

Diferencia entre instalar, actualizar y requerir

Suponga el siguiente escenario:

composer.json

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

archivo composer.lock

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

La última versión es 1.1.0. La última 0.*versión es0.3.2

Instalar en pc: composer install parsecsv/php-parsecsv

Esto instalará la versión 0.1.4como se especifica en el archivo de bloqueo

actualizar: composer update parsecsv/php-parsecsv

Esto actualizará el paquete a 0.3.2. La versión más alta con respecto a tu composer.json. La entrada composer.lockse actualizará.

exigir: composer require parsecsv/php-parsecsv

Esto actualizará o instalará la versión más reciente 1.1.0. Su composer.lockarchivo y composer.jsonarchivo también se actualizarán.

Adán
fuente
impresionante, así que para actualizar un paquete dentro de la versión restringida es composer update author/packagey luegocomposer install author/package
William Randokun
@WilliamRandokun si lo ha instalado antes, entonces composer update packagees suficiente, no es necesario llamar a instalar después de eso
Adam
1
exactamente lo que estoy buscando. Bien explicado. upvoted
kapitan el
15

Básicamente, puede hacer lo siguiente para instalar un nuevo paquete también.

php composer.phar require

entonces la terminal le pedirá que ingrese el nombre del paquete para la búsqueda.

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

Luego, el terminal le preguntará la versión del paquete (si desea tener la última versión, simplemente déjela en blanco)

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

Luego solo presiona la tecla de retorno. Terminal le pedirá otro paquete, si no desea instalar otro simplemente presione la tecla de retorno y listo.

orhankutlu
fuente
6

Puede usar el siguiente comando para actualizar cualquier módulo con sus dependencias

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

Para asegurarse de que el compositor actualice un paquete ya instalado a la última versión dentro de las restricciones de versión que ha establecido en composer.json, elimine el paquete del proveedor y luego ejecute:

php composer.phar update vendor/package
Tsounabe
fuente
44
Encontrará la misma sugerencia en esta publicación: github.com/composer/composer/issues/3112 . PD: El voto negativo sin explicación es tan fácil de hacer e inútil.
Tsounabe
5

Solo usa

composer require {package/packagename}

me gusta

composer require phpmailer/phpmailer

si el paquete no está en la carpeta del proveedor ... composer instálelo y si el paquete existe, actualice el paquete del compositor a la última versión.

Mostafa
fuente
2

Porque quería instalar un paquete específico "Necesito instalar solo 1 paquete para mi distribución SF2 (DoctrineFixtures)".

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

El anh
fuente