¿Cómo eliminar dependencias no utilizadas del compositor?


210

Instalé un paquete con Composer, e instaló muchos otros paquetes como dependencias.

Ahora desinstalé el paquete principal con composer remove packageauthor/packagename, pero no se eliminaron todas las dependencias antiguas. Esperaba que el compositor limpiara y solo mantuviera los paquetes requeridos de acuerdo con composer.jsonsus dependencias.

¿Cómo puedo forzar al compositor a limpiar y eliminar todos los paquetes no utilizados?

Respuestas:


377

La forma correcta de hacer esto es:

composer remove jenssegers/mongodb --update-with-dependencies

Debo admitir que la bandera aquí no es tan obvia en cuanto a lo que hará.

Actualizar

composer remove jenssegers/mongodb

A partir de v1.0.0-beta2 --update-with-dependencies es el valor predeterminado y ya no es necesario.


gracias a @Yehosef por comenzar el problema en github donde se proporcionó una solución, pero como no actualizó su respuesta, decidí escribir la mía para conveniencia de todos
Denis Pshenov

Gracias, no entendí el final de su discusión.
Lorenz Meyer

3
Una cosa a tener en cuenta: si ya lo ha hecho composer remove …, pero se olvidó --update-with-dependencieshasta que tropezó con esta pregunta: las llamadas posteriores a composer removeno matarán todas las dependencias. Tendrá que revertir, compositor install, entoncescomposer remove --update-with-dependencies
Mike G

Ahora recibo el siguiente mensaje:You are using the deprecated option "update-with-dependencies". This is now default behaviour. The --no-update-with-dependencies option can be used to remove a package without its dependencies
Pathros

44
¿Qué tal la limpieza después de la eliminación de un paquete? - Ahí es donde entra la respuesta de @LorenzMeyer: aprobado composer updatea esta respuesta a @LorenzMeyer
Allen Linatoc

29

De hecho, es muy fácil.

composer update

hará todo esto por usted, pero también actualizará los otros paquetes.

Para eliminar un paquete sin actualizar los demás, especifique ese paquete en el comando, por ejemplo:

composer update monolog/monolog

eliminará el monolog/monologpaquete

Sin embargo, pueden quedar algunas carpetas o archivos vacíos que no pueden eliminarse automáticamente y que deben eliminarse manualmente.


8
La parte desafortunada de esto es que te obliga a actualizar tus paquetes en lugar de solo eliminar versiones antiguas. Por ejemplo, si tengo dos paquetes AAA / aaa ~ 1 y la versión BBB / bbb ~ 2 y actualmente estoy en la versión 1.0 de AAA / aaa y lanzaron 1.1, cuando elimino BBB / bbb, me actualizo automáticamente (lo que puede que no ser lo que tenía la intención de hacer ...)
Yehosef

Tienes razón. Si tiene una solución mejor, regrese y publíquela como respuesta.
Lorenz Meyer

3
Todavía no, solo quiero señalar a los demás una trampa de este enfoque.
Yehosef

realmente debería ser una bandera en la instalación del compositor ... algo así como--prune
Yehosef

1
si le gusta la idea, puede votarla - github.com/composer/composer/issues/3751
Yehosef

20

los siguientes comandos harán lo mismo perfectamente

rm -rf vendor

composer install 

2
Esta parece ser la opción más limpia. Elimine el directorio de proveedores y deje que Composer obtenga todo nuevo.
Machavity

44
este es el estilo npm "save my day";)
r34

composer installeliminará automáticamente los paquetes no utilizados
Yidir

10

Simplemente ejecute composer install: hará que su vendordirectorio refleje las dependencias en el composer.lockarchivo.

En otras palabras, eliminará a cualquier proveedor que falte composer.lock.

Actualice el propio compositor antes de ejecutar esto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.