Este artículo se publicó en el blog anterior de Vazcell y lo he revisado y actualizado para Drupal 10 y 11.
En resumen
Para aplicar un parche en Drupal con Composer se instala el plugin cweagans/composer-patches, se declara el parche en la sección extra del composer.json (paquete, descripción y URL del parche) y se reinstala el paquete afectado. Si falla, el modo detallado de Composer explica el motivo.
Qué es un parche y cuándo usarlo
Un parche es un pequeño cambio en el código que corrige, mejora o modifica el comportamiento de un módulo, un tema o el propio núcleo de Drupal. Normalmente sale de una incidencia (issue) en drupal.org cuando el arreglo todavía no está publicado en una versión estable.
Los parches son temporales: cuando el módulo se actualice, es probable que el cambio ya venga incluido o que el parche deje de aplicarse porque el código ha cambiado. Por eso conviene revisarlos en cada actualización y quitarlos en cuanto dejen de hacer falta.
Instalar composer-patches
Para gestionar parches con Composer se usa el plugin composer-patches:
composer require cweagans/composer-patchesDeclarar el parche en composer.json
Los parches se declaran en la sección extra del composer.json, agrupados por paquete. Para cada uno se indica una descripción (yo pongo el título y el número de la incidencia, para encontrarla en el futuro) y la URL del archivo .patch:
"extra": {
"patches": {
"drupal/core": {
"Descripción del arreglo - 1234567": "https://www.drupal.org/files/issues/2026-01-01/1234567-10.patch"
},
"drupal/gin": {
"Improve content form detection - 3188521": "https://www.drupal.org/files/issues/2021-05-19/3188521-8.patch"
}
}
}Con el parche declarado, reinstala el paquete afectado para que Composer lo descargue de nuevo y aplique el parche:
composer update drupal/ginSi todo va bien, verás en la salida que el parche se ha aplicado. Guarda los cambios de composer.json y composer.lock en Git para que el resto del equipo y los despliegues apliquen el mismo parche.
El parche no se aplica o da error
Es habitual encontrarse parches que ya no aplican. Para ver el motivo, ejecuta Composer en modo detallado:
composer update drupal/gin -vvv- Si no encuentra el archivo, revisa que la URL del parche sea correcta y siga disponible.
- Si no encuentra las líneas que tiene que cambiar, el parche se hizo para otra versión del módulo: busca en la incidencia una versión más reciente del parche o comprueba si el arreglo ya está incluido en la versión que usas.
- Si no hay parche nuevo, se puede rehacer el cambio sobre tu versión y generar un parche propio, guardándolo en el repositorio.
Preguntas frecuentes
¿Puedo aplicar un parche a un archivo local en lugar de una URL?
Sí. composer-patches acepta rutas a archivos del propio proyecto, lo que es útil para parches propios o para no depender de que una URL externa siga disponible.
¿Qué pasa con los parches al actualizar Drupal?
Al actualizar, Composer intenta aplicar de nuevo cada parche. Si el arreglo ya está incluido o el código ha cambiado, fallará: es el momento de quitarlo o sustituirlo por una versión nueva.
Te puede interesar
Desarrollo Drupal freelance en remoto Cómo migrar de Drupal 7 a Drupal 10 y llegar a Drupal 11 Cuánto cuesta mantener una página web al año Qué necesita la web de un negocio local para conseguir clientes Acceder al panel de Drupal sin contraseña con Drush (drush uli) Config Split: configuración distinta por entorno en Drupal Error al activar un módulo en Drupal: fgets() must be of type resource (traducciones) Módulos esenciales para empezar un proyecto Drupal