Студия разработки сайтов и приложений

Netspark.ru

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

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

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

  1. Ставим пакет cweagans/composer-patches:

    composer require cweagans/composer-patches
  2. Хакаем, собственно, модуль.

  3. Переходим в директорию с модулем и делаем патч:

    git diff HEAD > contrib_module_patch_1.patch

    Если в директории модуля отсутсвует .git и патч поэтому сделать не получается — удаляем модуль и ставим заново:

    composer require drupal/contrib_module --prefer-source

    Теперь патч должен получиться.

  4. Переносим патч в какую-нибудь отдельную директорию, например /patches в корне проекта.

  5. Сбрасываем изменения в директории модуля:

    git checkout .
  6. В composer.json в секцию extra добавляем:

    "patches": {
        "drupal/contrib_module": {
            "patches/contrib_module_patch_1.patch": "patches/contrib_module_patch_1.patch"
            // тут будут другие патчи этого модуля
        }
        // а тут патчи других модулей
    }
  7. Теперь при запуске composer install патч будет применяться автоматически. И если код модуля обновится так, что патч станет неприменим (например, его включат в код модуля) — композер ругнется и мы сможем проверить, в чем дело.

Дополнительная плюшка: в patches можно добавлять не только рукотворные патчи, но и прямые ссылки на патчи, например, с D.org.

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

Комментарии