Cómo aplicar sus propios parches a los paquetes de Composer

Logotipo de PHP

No diría que Binance es la plataforma más fácil para principiantes, pero puede sentir que está seguro dentro de ella. Puede ...
Leer Más
Hoy, veremos una de las criptomonedas más exclusivas: Dogecoin y descubriremos dónde y cómo comprar Dogecoin. En esta guía, aprenderá ...
Leer Más
FP Markets fue fundada en 2005. La firma de corretaje FP Markets también es conocida como First Prudential Markets ...
Leer Más

El uso de paquetes de terceros puede acelerar el desarrollo de su proyecto. A veces, es posible que deba agregar una funcionalidad adicional o corregir un error crítico. A continuación, se explica cómo aplicar parches a los paquetes PHP instalados por Composer.

Cuándo parchear un paquete

Primero, considere si es apropiado crear un parche en el proyecto. Un parche siempre debe ser un cambio menor. Si necesita agregar una nueva funcionalidad extensa, debe abrir un problema contra el paquete o bifurcarlo usted mismo. Esto ayudará a evitar conflictos a medida que evoluciona el paquete.

Debe pensar detenidamente si el cambio que necesita es realmente específico para su proyecto. Los parches de dependencia suelen afectar solo a unas pocas líneas de código. Abordan errores y problemas que de otro modo le impedirían usar el paquete. La mayoría de los parches son de naturaleza a corto plazo. Deberían reemplazarse más adelante por correcciones en origen dentro de la base de código del paquete.

En última instancia, debes medir tus intenciones. ¿Está abordando un problema inmediato con un paquete o ampliando la funcionalidad del paquete para alinearlo con su código base? Si es lo último, debería considerar contribuir al paquete o envolverlo con clases y funciones adicionales que sean ciudadanos de primera clase en su proyecto.

Crear un parche de compositor

Una vez que haya hecho la llamada para parchear, puede comenzar a preparar su proyecto. Composer no tiene soporte de parche incorporado, por lo que usaremos el popular simplify/vendor-patches proyecto para agregarlo. Esto proporciona una interfaz intuitiva sobre cweagans/composer-patches para ayudarlo a crear nuevos parches.

composer require --dev symplify/vendor-patches

Asegúrese de que el paquete que necesita parchear esté instalado en su proyecto:

composer require example/broken-package

A continuación, abra el archivo problemático en su editor de código. Lo encontrarás dentro del vendor directorio. En nuestro ejemplo, necesitamos editar vendor/example/broken-package/src/Broken.php:


 
class Broken {
    public function __construct(string|int $foo) {
        if (is_string($foo)) {
            echo "Valid value!";
        }
    }
}
 
?>

los Broken Se espera que la clase acepte tanto cadenas como enteros, utilizando los tipos de unión de PHP 8. Desafortunadamente, mirar la fuente muestra que en realidad solo acepta cadenas.

En nuestro ejemplo ficticio, el responsable del paquete ha reconocido el problema pero aún no ha creado una nueva versión. Mientras tanto, solucionemos el problema.

Copie el archivo roto, sin alterar, y agregue un .old sufijo:

cp vendor/example/broken-project/src/Broken.php vendor/example/broken-project/src/Broken.php.old

Asegúrese de no editar el .old ¡archivo!

A continuación, edite el original archivo para que funcione correctamente en su base de código. Mientras edita en el lugar, los cambios entran en vigencia de inmediato. Verifique que su base de código ahora se comporte como se esperaba.


 
class Broken {
    public function __construct(string|int $foo) {
        if (is_string($foo)) {
            echo "Valid value!";
        }
        else if (is_int($foo)) {
            echo "Also valid!";
        }
    }
}
 
?>

Crear el archivo de parche

Ahora puede usar el symplify/vendor-patches proyecto para crear un archivo de parche para su corrección. El paquete proporciona un vendor-patches binario que escanea automáticamente su vendor directorio para encontrar los cambios que ha realizado.

vendor/bin/vendor-patches generate

Ejecutar el comando generará una diferencia para usted. Se guardará en el patches directorio en la raíz de su proyecto. La diferencia se calcula comparando el .php y .php.old archivos que ha creado.

Puede ejecutar el comando nuevamente para descubrir los nuevos parches que agregue. Cada archivo modificado tiene su propio parche dentro del patches directorio.

Parcheo automático

Dentro de tu composer.json archivo, verá que se ha agregado una nueva sección:

{
    "extra": {
        "patches": {
            "example/broken-package": [
                "patches/example-broken-package-src-broken-php.patch"
            ]
        }
    }
}

los patches El objeto asigna los nombres de los paquetes instalados a una matriz de archivos de parche para aplicar. Estos parches se aplicarán automáticamente siempre que composer install.

Un script de instalación está registrado por simplify/vendor-patches. Se invoca después de que se instala cada dependencia. La secuencia de comandos busca ver si se han definido parches para el paquete. Aplicará automáticamente los que encuentre.

Verás líneas en el composer install salida que indica cuándo se han aplicado los parches. Si se informa de un error, puede utilizar composer install --verbose para obtener más información sobre por qué se omitió el parche. Esto a menudo se debe a que una actualización de paquete solucionó el problema que parcheó, lo que hace que su archivo de parche sea redundante.

Eliminación de parches

Puede eliminar temporalmente un parche eliminando su línea de composer.json. Esto detendrá la aplicación del parche cuando composer install.

Para eliminar permanentemente un parche de su proyecto, elimine su composer.json línea. A continuación, puede quitar su .patch archivo de su proyecto patches directorio.

Si desea revertir un parche que ha aplicado localmente, lo más sencillo es seguir los pasos anteriores para eliminar o deshabilitar el parche. A continuación, puede eliminar el paquete del vendor directorio y ejecutar composer install para volver a la pizarra limpia.

Deja un comentario