Drupal давно использует composer для управления зависимостями и для загрузки/обновления модулей. Composer кроме всех прочих полезностей позволяет наладить работу с заплатками. Вот этот аспект я и опишу далее в статье.
По умолчанию, Drupal, установленный через composer, не настроен для работы с патчами. Потому мы добавим специальный плагин для работы с заплатками.
1 |
composer require cweagans/composer-patches |
Теперь нужно разрешить этот плагин. Это можно сделать вручную в composer.json, указав в секции config->allow-plugins имя плагина и значение true.

Мне больше нравится другой вариант — сделать это из командной строки:
1 |
composer config --json allow-plugins.cweagans/composer-patches true |
Теперь, когда плагин установлен и включен, его требуется настроить. В секции экстра добавьте параметры:

Это, конечно, можно сделать и из командной строки:
1 2 |
composer config extra.enable-patching true composer config extra.patches-file "./composer.patches.json" |
Осталось только разобраться с файлом composer.patches.json, в котором как раз и описываются патчи, которые необходимо применять после обновлений кода.
composer.patches.json
Этот JSON-файл представляет собой структуру, указывающую пласты патчей (заплаток) для Composer, применяемых к конкретным пакетам.
Общая структура:
1 2 3 4 5 6 7 |
{ "patches": { "vendor/package-name": { "Описание патча или ID": "URL или путь до патча" } } } |
1. "patches"
Корневой ключ. Содержит список всех пакетов, к которым применяются патчи.
2. "vendor/package-name"
Название пакета, для которого предназначены патчи. Например:
drupal/core
drupal/bootstrap
3. "<описание патча>"
Ключ — это метка или краткое описание патча. Это может быть:
- описание действия патча (
"Add Wistia Support"
) - номер issue на drupal.org (
"#3025039 New non translatable field..."
) - произвольный идентификатор (
"2321071"
)
Это человеко-читаемая часть, используемая для идентификации патча в логах и ошибках.
4. "<путь или URL>"
Значение — это:
- абсолютный URL до патча (чаще всего с drupal.org)
- относительный путь к локальному
.patch
-файлу в проекте
Пример:
1 2 3 4 5 6 7 8 9 10 |
"extra": { "patches": { "drupal/core": { "#3020448 translation errors": "https://www.drupal.org/files/issues/2019-04-23/invalid_translations.patch" }, "drupal/bootstrap": { "#3219852 fix for dialogs": "https://www.drupal.org/files/issues/2022-08-31/dialog-fix.patch" } } } |
Патчи применяются во время установки или обновления зависимостей (composer install
/ composer update
).