Aplicar un parche a un módulo contrib en Drupal

Tutoriales
reading time 10

Muchas veces necesitamos aplicar un parche a un módulo contrib que estamos usando en nuestro proyecto y para hacerlo necesitamos preparar nuestro durpal.

En este tutorial veremos como hacerlo paso a paso.

Para el ejemplo vamos a aplicar un parche al módulo storybook (módulo que estoy usando en uno de mis proyectos).

Antes que nada debemos preparar nuestro drupal para que pueda importar parches tanto sea al core como a los módulos contribs o themes.

Instalamos el paquete: cweagans/composer-patches

 composer require cweagans/composer-patches

Ahora instalamos el módulo en nuestro drupal como siempre (en este caso es un Drupal 11)

composer require 'drupal/storybook:^1.0'
drush en -y storybook
drush cr

Ahora vamos a buscar el parche. Cabe aclarar que la issue o problema del módulo tiene que tener un parche provisto y aprovado por los mantenedores del módulo, en este caso veremos la issue relacionada a un problema con las imágenes que tiene el módulo de storybook, la issue se titula: Image not displayed correctly because image path is relative.

Dentro de la issue buscamos una sección donde se encuentran los parches para la version del módulo que estamos usando

seccion de patch

Vamos a copiar la url al parche, en este caso: https://www.drupal.org/files/issues/2024-12-19/storybook-images_not_displayed_correctly_because_image_path_is_relative-3441430-11.patch

Bien ahora que tenemos el parche vamos a incorporarlo en el composer.json file de nuestro proyecto en la sección llamada extra

"extra": {
        "patches": {
            "drupal/storybook": {
                "Issue #3441430": "https://www.drupal.org/files/issues/2024-12-19/storybook-images_not_displayed_correctly_because_image_path_is_relative-3441430-11.patch"
            }
        },
        "drupal-scaffold": {
            "locations": {
                "web-root": "web/"
            }
        },

Es importante que pongamos bien el nombre del módulo contrib que estamos parchando, en este caso drupal/storybook y luego en el nombre del parche podemos poner lo que deseemos, en mi caso pongo el número de la issue relacionada con el problema: #3441430.

Ahora para que el parche sea aplicado tendremos que ejecutar el comando (tambien funciona con el composer update) 

composer install

Luego en la consola podremos ver el mensaje de parche aplicado, si todo fue bien veremos algo así

patch 2

Como se puede ver en la imagen el parche fue aplicado con éxito. Si vemos un mensaje de error puede ser porque el parche no es para la version del módulo que estamos usando, en cuyo caso debemos pedir que se cree un parche para nuestra version o bien desarrollar nosotros mismos el parche y contribuirlo a la comunidad 😉

Bueno eso es todo por ahora respecto de la aplicación de parches en módulos contrib.

Este post fue inspirado por este gran aporte realizado por Goran Nikolovski.

Crear y aplicar un parche (patch) custom

Si encontramos un error en un modulo contrib y no hay todavia una solucion por parte de los que mantienen el modulo, podemos crearlo nosotros y aplicarlo en nuestro proyecto mientras esperamos que lo solucionen en una nueva version del modulo.

Los pasos son los siguientes:

  • Clonar el modulo en la version que estamos usando.
  • Agregar los cambios que solucionan el problema.
  • Generar el parche usando git diff.
  • Poner el parche en la carpeta patch del proyecto.
  • Agregar el parche en el composer.json.
  • Ejecutar el comando composer install para implementar los cambios.

Usaremos por ejemplo un caso real que tuve con el modulo adsense en su version 8.x-1.5

Clonar el modulo en la version que estamos usando

Creamos una carpeta en nuestro file system para clonar el repo del modulo y editarlo

mkdir custompatch
cd custompatch
git clone -b 8.x-1.5 --single-branch https://git.drupalcode.org/project/adsense.git
cd adsense
contrib module version

Agregar los cambios que solucionan el problema, en este caso el file AdsenseManagedSettings.php

nano web/modules/contrib/adsense/src/Form/AdsenseManagedSettings.php

Generar el parche usando git diff

git diff > adsense-8x-1.5-20250701-1.patch

Poner el parche en la carpeta patch del proyecto

cp adsense-8x-1.5-20250701-1.patch ~/drupalproject/patches
drupal patch

Agregar el parche en el composer.json en la seccion de extra -> patches

"drupal/adsense": {
 "Update settings form in AdsenseManagedSettings": "patches/adsense-8x-1.5-20250701-1.patch"
}

Ejecutar el comando composer install para implementar los cambios

composer install

Listo ya deberiamos poder chequear el file que queriamos modificar para tener los cambios implementados en nuestro proyecto.