Pregunta Compositor: eliminar un paquete, limpiar dependencias, no actualizar otros paquetes


La situación

Digamos que tengo un proyecto con dos paquetes instalados por Composer:

php composer.phar require 'squizlabs/php_codesniffer:~2.0' 'phpmd/phpmd:~2.1'

El autogenerado composer.json archivo se ve así:

{
    "require": {
        "squizlabs/php_codesniffer": "~2.0",
        "phpmd/phpmd": "~2.1"
    }
}

En el autogenerado composer.lock archivo, están los dos paquetes solicitados:

  • 2.0.0 squizlabs/php_codesniffer
  • 2.1.3 phpmd/phpmd

y también cuatro dependencias de phpmd/phpmd:

  • 2.0.4 pdepend/pdepend
  • 2.5.9 symfony/config
  • 2.5.9 symfony/dependency-injection
  • 2.5.9 symfony/filesystem

Unos días más tarde, squizlabs/php_codesniffer versión 2.1.0 se lanza, pero no quiero correr update todavía. Quiero permanecer en la versión 2.0.0 por ahora, y tal vez correré update en unos dias.


La pregunta

Ahora quiero eliminar phpmd/phpmd de mi proyecto Quiero lograr los siguientes puntos:

  1. Borrar phpmd/phpmd de composer.json
  2. Borrar phpmd/phpmd de composer.lock
  3. Borrar phpmd/phpmd desde el vendor carpeta
  4. Eliminar todas las dependencias de phpmd/phpmd de composer.lock
  5. Eliminar todas las dependencias de phpmd/phpmd desde el vendor carpeta
  6. No actualices squizlabs/php_codesniffer a la versión 2.1.0

Editar: Preferiría una solución que no requiera cambiar el restricción de versión de squizlabs/php_codesniffer en composer.json


Lo que he intentado

Si corro:

php composer.phar remove phpmd/phpmd

esto logra puntos 1, 2, 3, 6, pero no alcanza puntos 4, 5.

Las dependencias de phpmd/phpmd permanecer en composer.lock y el vendor carpeta.

Si corro:

php composer.phar remove phpmd/phpmd
php composer.phar update

esto logra puntos 1, 2, 3, 4, 5, pero no alcanza el punto 6.

squizlabs/php_codesniffer se actualiza a la versión 2.1.0.


32
2018-01-14 14:03


origen


Respuestas:


Eliminar la entrada de composer.json entonces corre composer update phpmd/phpmd.

En cuanto a por qué esa es la solución que funciona. No tengo idea, pero eso es lo que se requiere para eliminar un paquete totalmente de composer.lock y /vendor y le permiten instalar un paquete nuevo / reemplazo / conflictivo.


25
2018-06-09 02:30



Hacer esto:

php composer.phar remove phpmd/phpmd

Modifique el archivo composer.json para que contenga la siguiente sección de requisitos.

{
    "require": {
        "squizlabs/php_codesniffer": "2.0.*",
    }
}

Ahora corre composer.phar update. Eso debería llevarte a donde quieres estar.

Nota: También puede fijar el paquete php_codesniffer a una versión específica, p. 2.0.0. Más información sobre cómo el compositor puede encontrar versiones en aquí.


11
2018-01-15 02:25



No creo que esto sea posible actualmente. Este es el tipo de cosa que puede desear enviar como solicitud de función al compositor

Mientras tanto, creo que tu mejor opción es ir con la opción n. ° 1: php composer.phar remove phpmd/phpmd

Eliminará el paquete de sus dependencias explícitas sin obligarlo a actualizar nada. Las dependencias obsoletas de su biblioteca eliminada permanecerán hasta que vuelva a ejecutar composer update, que es algo que deberías hacer periódicamente de todos modos. La mayoría de los archivos de las antiguas dependencias deben configurarse para cargar automáticamente de una forma u otra, por lo que no debe tener ninguna penalización real por mantener esos archivos en un lugar diferente al espacio que usan en el disco.


0
2017-11-10 19:57



Para eliminar el paquete de los archivos .json y .lock, debe eliminar el paquete de la siguiente manera:

composer remove package-name

0
2017-07-04 19:07