composer php - update - Compositor: ¿cómo puedo instalar otra dependencia sin actualizar las antiguas?
instalar composer ubuntu (4)
En mi caso, tuve un repositorio con:
- requisitos A, B, C, D en
.json
- pero solo A, B, C en el
.lock
Mientras tanto, A, B, C tenía versiones más nuevas con respeto cuando se generaba el bloqueo.
Por algún motivo, eliminé los "proveedores" y quise hacer una composer install
y fallé con el mensaje:
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.
Traté de ejecutar la solución de Seldaek que emite un composer update vendorD/libraryD
pero el compositor insistió en actualizar más cosas, por lo que .lock
tuvo demasiados cambios como para mi herramienta my git.
La solución que utilicé fue:
- Eliminar todos los
vendors
dir. -
VendorD/LibraryD
temporalmente el requisitoVendorD/LibraryD
del.json
. - ejecutar la
composer install
- A continuación, elimine el archivo
.json
y.json
nuevo desde el repositorio (equivalente a volver a agregar el archivo, pero evitando posibles cambios en el espacio en blanco). - A continuación, ejecute Seldaek''s solution
composer update vendorD/libraryD
.lock
la biblioteca, pero además, git
diff me mostró que en .lock
solo se .lock
las cosas nuevas sin editar las otras.
(Thnx Seldaek para el puntero;))
Tengo un proyecto con algunas dependencias y me gustaría instalar otro, pero me gustaría mantener a los demás como están. Así que edité el composer.json
, pero si ejecuto la composer install
, obtengo el siguiente resultado:
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.
En primer lugar, tengo instalado mcrypt, así que no sé por qué se queja de eso.
Entonces, ¿cómo puedo instalar esta nueva dependencia?
Mi compositor.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"
}
En realidad, la solución correcta es:
composer require vendor/package
Tomado de la require :
El comando
require
agrega nuevos paquetes al archivocomposer.json
del directorio actual.
php composer.phar require
Después de agregar / cambiar los requisitos, los requisitos modificados se instalarán o actualizarán.
Si no desea elegir los requisitos de forma interactiva, puede pasarlos al comando.
php composer.phar require vendor/package:2.* vendor/package2:dev-master
Si bien es cierto que la composer update
instala nuevos paquetes encontrados en composer.json, también actualizará el archivo composer.lock y cualquier paquete instalado de acuerdo con cualquier lógica difusa ( >
o *
caracteres después de dos puntos) encontrados en composer.json! Esto se puede evitar usando el composer update vendor/package
, pero no recomendaría hacerlo, ya que es un argumento olvidado lejos de un proyecto potencialmente roto ...
Mantenga las cosas en su sano juicio y quédese con el composer require vendor/package
para agregar nuevas dependencias! 😉
Mi caso de uso es más simple, y se ajusta simplemente a su título, pero no a su mayor detalle.
Es decir, quiero instalar un paquete nuevo que todavía no está en mi composer.json
sin actualizar todos los demás paquetes.
La solución aquí es composer require x/y
Para instalar un paquete nuevo y solo eso, tiene dos opciones:
Usando el comando
require
, solo ejecuta:composer require new/package
Composer adivinará la mejor restricción de versión para usar, instalar el paquete y agregarlo a
composer.lock
.También puede especificar una restricción de versión explícita ejecutando:
composer require new/package ~2.5
-O-
Usando el comando de
update
, agregue el nuevo paquete manualmente acomposer.json
, luego ejecute:composer update new/package
Si Composer se queja, indicando "Sus requisitos no se pudieron resolver en un conjunto de paquetes instalable", puede resolver esto pasando el indicador --with-dependencies
. Esto incluirá en la lista blanca todas las dependencias del paquete que está intentando instalar / actualizar (pero ninguna de sus otras dependencias).
Con respecto a los problemas de Asker Question con Laravel y mcrypt: compruebe que esté habilitado correctamente en su CLI php.ini. Si php -m
no muestra mcrypt, entonces falta.
Importante: ¡no olvide especificar new/package
al usar la composer update
! Omitir ese argumento hará que todas las dependencias, así como composer.lock
, se actualicen.