---
title: 'Хакаем Drupal правильно'
url: 'https://graker.ru/news/2020/09/11/hack-drupal-the-right-way'
language: ru
type: post
author: 'Роман Грачев'
published: '2020-09-11T14:35:00+03:00'
updated: '2020-09-11T14:41:39+03:00'
categories:
  - Друпальчики
---

# Хакаем Drupal правильно

С переходом в Drupal 8 на composer запихивать контрибные модули и само ядро в git стало совсем не удобно и не правильно. Но хакать (точнее, делать лучше!) модули и ядро все равно хочется. К счастью, с композером это даже удобнее.

Допустим, мы внесли изменения в модуль contrib\_module и хотим их увековечить в своем гите. Действия следующие:

1. Ставим пакет `cweagans/composer-patches`:
    
    ```bash
    composer require cweagans/composer-patches
    ```
2. Хакаем, собственно, модуль.
3. Переходим в директорию с модулем и делаем патч:
    
    ```bash
    git diff HEAD > contrib_module_patch_1.patch
    ```
    
    Если в директории модуля отсутсвует `.git` и патч поэтому сделать не получается — удаляем модуль и ставим заново:
    
    ```bash
    composer require drupal/contrib_module --prefer-source
    ```
    
    Теперь патч должен получиться.
4. Переносим патч в какую-нибудь отдельную директорию, например `/patches` в корне проекта.
5. Сбрасываем изменения в директории модуля:
    
    ```bash
    git checkout .
    ```
6. В `composer.json` в секцию `extra` добавляем:
    
    ```composer
    "patches": {
        "drupal/contrib_module": {
            "patches/contrib_module_patch_1.patch": "patches/contrib_module_patch_1.patch"
            // тут будут другие патчи этого модуля
        }
        // а тут патчи других модулей
    }
    ```
7. Теперь при запуске `composer install` патч будет применяться автоматически. И если код модуля обновится так, что патч станет неприменим (например, его включат в код модуля) — композер ругнется и мы сможем проверить, в чем дело.

Дополнительная плюшка: в `patches` можно добавлять не только рукотворные патчи, но и прямые ссылки на патчи, например, с [D.org](https://drupal.org).

P.S. Ну и кинуть патч в ишью самого модуля не забудьте, для общего блага.
