¿Cómo obligar al compositor a reinstalar una biblioteca?

6 minutos de lectura

avatar de usuario
Julian

Estoy usando la aplicación de esqueleto ZF2 y tiene un .gitignore que evita que las bibliotecas externas se comprometan con git. Durante la depuración, me gusta ir y cambiar cosas aquí y allá en la fuente de las bibliotecas para aprender cómo funcionan las cosas. Si estos estuvieran controlados por versiones, sería muy fácil revertirlos a su estado original.

¿Cómo puedo obligar a Composer a reinstalar un marco en particular para que pueda obtener una copia nueva, sin modificar, nuevamente?

PD: no sugiera eliminar el archivo .gitignore ya que está allí por una razón; evita que mis bibliotecas de terceros ingresen al repositorio de mi aplicación. Siempre puedo instalarlos durante una implementación automatizada.

Lo mismo se aplica al marco de Laravel: también ignora la carpeta del proveedor.

  • Una opción sería eliminar composer.lock y luego ejecutar composer install

    – vascoblanco

    26/10/2013 a las 20:14

  • compositor reinstalar proveedor/paquete

    – PaulH

    6 de julio a las 11:01

avatar de usuario
Zoran

Primero ejecutar composer clearcache

Luego borre su carpeta de proveedores

rm -rf vendor/*

o mejor aún, simplemente elimine el módulo específico que causa problemas para evitar tener que descargar todo nuevamente.

  • @Loenix, desbloquéalos.

    – Medio punto

    23 de enero de 2018 a las 20:02

  • He tenido casos en los que la memoria caché local estaba dañada, por lo que, incluso después de eliminar el directorio del proveedor, seguí reinstalando una dependencia rota. composer clearcache es una buena adición en tales casos.

    – okdewit

    5 de febrero de 2018 a las 9:14

  • Esto parece un enfoque muy radical considerando que el compositor necesita reinstalar todos los paquetes cuando el OP solo necesita reinstalar un paquete. composer require vendor/package hará lo que quiere el OP y en menos tiempo también. Estoy un poco sorprendido de que tantos hayan votado a favor de esta respuesta.

    – frederickjh

    17 mayo 2019 a las 11:40

  • si composer clearcache no funciona, puede eliminar /home/[username]directorio /.cache. Eso forzará una nueva descarga. Útil si usa un compilador de paquetes privado, además de packagist.composer.org, y alguien realiza cambios sin agregar una nueva etiqueta.

    – Neil Davis

    29 de agosto de 2019 a las 12:30


  • Composer no necesariamente solo se instala en el directorio de proveedores, por lo que incluso como un enfoque de mano dura, no funciona en todas las situaciones.

    – umdoriano

    5 de febrero de 2020 a las 21:11

Puedes usar el --prefer-source bandera para que composer extraiga paquetes externos con la información de VCS (si hay alguna disponible). Simplemente puede volver al estado original. Además, si emite el composer update el compositor de comandos detectará cualquier cambio que haya realizado localmente y le preguntará si desea descartarlo.

Su archivo .gitignore está relacionado con su proyecto raíz (esqueleto ZF2) y evita que el directorio del proveedor (donde están sus librerías de terceros) se comprometa con su propio VCS. El archivo de ignorar no está relacionado con los repositorios de git de sus proveedores.

  • Inicialmente, su sugerencia -prefer-source no funcionó hasta que me di cuenta de que tenía que eliminar y reinstalar todas las bibliotecas para que esto funcionara como pretendía y luego composer status -v me dio la información con los cambios.

    – Julian

    26/10/2013 a las 20:48

  • Eso no me funcionó, desde 2021-05 podemos usar composer reinstall <package-name>

    – PaulH

    6 de julio a las 11:26

No quería borrar todos los paquetes en vendor/ directorio, así que así es como lo hice:

  1. rm -rf vendor/package-i-messed-up
  2. composer install otra vez

  • o ‘compositor requiere proveedor/paquete-i-estropeado’ también sería bueno

    – aarcarr

    24 de mayo de 2018 a las 10:33


  • Si eso no funciona, puede ejecutar composer clearcache primero en caso de que el caché se haya dañado por alguna razón.

    – Sean el Frijol

    26 sep 2019 a las 14:31

  • Esta es la manera correcta. Y para aclarar, debe ser el /vendor/ que se eliminó para que composer lo reinstale desde el archivo de bloqueo. Si uno elimina solo el directorio y deja atrás el directorio con nombre , por ejemplo, /proveedor//, entonces no se volverá a instalar.

    – Elías Lynn

    27 de enero de 2021 a las 18:03


Lo que hice:

  1. Eliminó la carpeta de esa biblioteca en particular
  2. composer update --prefer-source vendor/library-name

Obtiene la biblioteca nuevamente junto con su repositorio git

avatar de usuario
cweiske

La solicitud de función relevante es https://github.com/composer/composer/issues/3112

En 2021-05, el parche de comando “reinstalar” se fusionó: https://github.com/composer/composer/pull/9915 – está disponible en la versión 2.1.0 del compositor y todas las posteriores.


los reinstall el comando está fusionado y disponible desde 2.1.0:

composer reinstall <package-name> # Removes and installs the package.

avatar de usuario
Kuyá

Vuelva a instalar las dependencias. Elimine la carpeta del proveedor (manualmente) o mediante el comando rm (si está en la carpeta del proyecto, seguro) en Linux antes:

rm -rf vendor/

composer update -v

https://www.dev-metal.com/composer-problems-try-full-reset/

Respuesta corta

puede ejecutarlo en un comando cli con &&:

composer remove vendor/package && composer require vendor/package:version

Respuesta detallada

Eliminar el paquete existente por comando:

composer remove vendor/package

esto eliminará la carpeta del paquete de /vendor, la fila de composer.json y el registro completo del paquete de composer.lock de manera correcta eliminando las dependencias no utilizadas y no eliminando las dependencias que utilizan otros paquetes

Luego instale el preferido con el comando:

composer require vendor/package:version

esto instalará el paquete con la versión deseada de manera correcta agregando una fila a composer.json, agregando un registro a composer.lock y todos los paquetes dependientes necesarios si hubiera un paquete que se usa en más de un paquete, Composer intentará instalar la versión que se ajuste todos usando paquetes. Si no resuelve esto, se bloqueará con el mensaje de error correspondiente

Enlaces

¿Cómo instalar una versión específica del paquete usando Composer?

¿Cómo eliminar un paquete de Laravel usando Composer?

Instale, desinstale y actualice los temas de los módulos, etc. con Composer: https://modulesunraveled.com/drupal-8-composer-and-configuration-management/installing-and-uninstalling-modules-composer

  • Agregue alguna explicación a su respuesta para que otros puedan aprender de ella; esto no me parece una buena solución, ya que contiene la posibilidad de que cambien las dependencias de otros paquetes.

    –Nico Haase

    28 de febrero de 2021 a las 10:34

  • He añadido explicaciones tanto como sea posible. Estos comandos son nativos de Composer y recomendados por la comunidad SO. Si necesita más explicaciones, escriba exactamente qué quiere ver, intentaré responder

    – Ilia Kolesnikov

    1 de marzo de 2021 a las 13:21

  • ¿Hay alguna buena razón para no llamar composer install después de eliminar la carpeta del paquete del directorio de proveedores? Esto omitiría todos los cambios innecesarios en el archivo de bloqueo

    –Nico Haase

    1 de marzo de 2021 a las 13:58

  • Eliminar el directorio de proveedores no es una acción nativa, composer remove es un comando que hace que eliminar un paquete, composer requiere – para instalarlo Editar cualquier cosa como composer.json, composer.lock, /vendor manualmente es una mala práctica Eliminar toda la carpeta es lento e innecesario Antes de que pueda hacer composer install para la nueva versión del paquete, deberá editar composer.json, lo cual es una mala práctica si lo hace en la sección “requerir”.

    – Ilia Kolesnikov

    1 de marzo de 2021 a las 15:18


  • ¿”Pruebas”? No. ¿Pero tiene alguna prueba de que la reinstalación instala la misma versión de ese paquete que se usó antes?

    –Nico Haase

    1 de marzo de 2021 a las 15:20

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad