Tengo un proyecto con algunas dependencias y me gustaría instalar otro, pero me gustaría mantener los demás como están. Así que he editado elcomposer.json
, pero si ejecuto 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 allí.
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"
}
composer-php
dualidad_
fuente
fuente
Respuestas:
Para instalar un nuevo paquete y solo eso, tiene dos opciones:
Usando el
require
comando, simplemente ejecute:Composer adivinará la mejor restricción de versión para usar, instalará el paquete y lo agregará a
composer.lock
.También puede especificar una restricción de versión explícita ejecutando:
-O-
Con el
update
comando, agregue el nuevo paquete manualmente ycomposer.json
luego ejecute:Si Composer se queja, indicando que "Sus requisitos no se pudieron resolver con un conjunto de paquetes instalables", puede resolverlo 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 del autor de la pregunta con Laravel y mcrypt: verifique que esté habilitado correctamente en su CLI php.ini. Si
php -m
no aparece mcrypt, entonces falta.Importante: ¡No olvides especificar
new/package
al usarcomposer update
! Omitir ese argumento hará que todas las dependencias, así comocomposer.lock
, se actualicen.fuente
"new/package" : "*",
composer.json"require"
sección ?En realidad, la solución correcta es:
composer require vendor/package
Tomado de la documentación de CLI para Composer :
Si bien es cierto que
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 los dos puntos) encontrados en composer.json. Esto se puede evitar usandocomposer update vendor/package
, pero no recomendaría hacer un hábito, ya que eres un argumento olvidado lejos de un proyecto potencialmente roto ...¡Mantenga las cosas cuerdas y quédese
composer require vendor/package
para agregar nuevas dependencias! 😉fuente
composer require
actualizará el archivo composer.lock?Mi caso de uso es más simple y se ajusta simplemente a su título, pero no a sus detalles adicionales.
Es decir, quiero instalar un nuevo paquete que aún no está en mi
composer.json
sin actualizar todos los demás paquetes.La solución aquí es
composer require x/y
fuente
En mi caso, tuve un repositorio con:
.json
.lock
Mientras tanto, A, B, C tenían versiones más nuevas con respecto cuando se generó el bloqueo.
Por alguna razón, eliminé los "proveedores" y quería hacer un
composer install
error con el mensaje:Traté de ejecutar la solución desde Seldaek emitiendo un
composer update vendorD/libraryD
pero el compositor insistió en actualizar más cosas, así que.lock
también había visto mi herramienta git.La solución que usé fue:
vendors
directorio.VendorD/LibraryD
de.json
.composer install
..json
y vuelva a pagarlo desde el repositorio (equivalente a volver a agregar el archivo, pero evitando posibles cambios en los espacios en blanco).composer update vendorD/libraryD
Instaló la biblioteca, pero además,
git
diff me mostró que en el.lock
solo se agregaban cosas nuevas sin editar las otras.(Thnx Seldaek para el puntero;))
fuente
composer.lock
nunca deberían eliminarse y reconstruirse felizmente..lock
es ... para bloquear !! ; D: de lo contrario, el archivo de bloqueo sería inútil y no lo estaría cometiendo o no existiría en absoluto. Si se ejecuta en una empresa orientada a la calidad y reconstruye y compromete un bloqueo con, digamos, 1.000 dependencias, todas cambiarán y la gente de control de calidad vendrá a matarlo jajaja.