Установить модуль через composer на Drupal 9, если у него есть версия только для Drupal 8

По мотивам вопроса

Предположим, мы хотим установить модуль Toolbar Themes на D9, но он давно не обновлялся и не имеет директивы совместимости с D9

Вариант 1 - простейший

Скачать модуль вручную, положить в папку modules/custom и внести нужные изменения. После этого нужно капать на мозги мейнтейнерам модуля, чтобы они поскорее приняли патчи и желательно выпустили новый релиз. После этого модуль нужно удалить из custom и установить с помощью composer

Вариант 2 - новая функциональность на drupal.org

Не так давно на drupal.org появилась функциональность issue forks. Мы можем делать форк issue, а затем через интерфейс гитлаба вносить изменения (это удобно, когда нужно изменить всего 1 строчку, как в нашем случае).

Нужно создать новый issue (в нашем случае он уже создан) https://www.drupal.org/project/toolbar_themes/issues/3149099

Нажать "Create issue fork"

Кликаем по ссылке, переходим на гитлаб.

Открываем файл toolbar_themes.info.yml и добавляем в него строчку core_version_requirement: ^8 || ^9, жмем "commit changes"

Добавляем в ваш composer.json в раздел основного репозитория

 "exclude": [
   "drupal/toolbar_themes"
]

чтобы получилось в итоге

{
    "type": "composer",
    "url": "https://packages.drupal.org/8",
    "exclude": [
        "drupal/toolbar_themes"
    ]
}

Возвращаемся на drupal.org в наш issue, жмем "show commands" и копируем путь к нашему репозиторию. Он должен быть в виде git@git.drupal.org:issue/toolbar_themes-3149099.git

Вставляем его в раздел репозиториев нашего compose.json

{
    "type": "git",
    "url": "git@git.drupal.org:issue/toolbar_themes-3149099.git"
}

должно получиться вот так в итоге

"repositories": [
    {
        "type": "composer",
        "url": "https://packages.drupal.org/8",
        "exclude": [
            "drupal/toolbar_themes"
        ]
    },
    {
        "type": "git",
        "url": "git@git.drupal.org:issue/toolbar_themes-3149099.git"
    }
],

выполняем установку модуля командой composer require 'drupal/toolbar_themes:dev-3149099'

Если мы получили ошибку No valid composer.json was found in any branch or tag of git@git.drupal.org:issue/toolbar_themes-3149099.git, could not load a package from it. значит у модуля нет своего composer.json файла и нужно еще добавить в наш composer.json

        "drupal/toolbar_themes": {
        "type": "package",
        "package": {
            "name": "drupal/toolbar_themes",
            "version": "dev-custom",
            "type": "drupal-module",
            "source": {
            "type": "git",
            "url": "git@git.drupal.org:issue/toolbar_themes-3149099.git",
            "reference": "3149099"
            }
        }
        }

Где reference указан стрелкой

Нужно будет переделать секцию repositories в такой вид

    "repositories": {
        "drupal": {
            "type": "composer",
            "url": "https://packages.drupal.org/8",
            "exclude": [
                "drupal/toolbar_themes"
            ]
        },
        "drupal/toolbar_themes": {
        "type": "package",
        "package": {
            "name": "drupal/toolbar_themes",
            "version": "dev-custom",
            "type": "drupal-module",
            "source": {
            "type": "git",
            "url": "git@git.drupal.org:issue/toolbar_themes-3149099.git",
            "reference": "3149099"
            }
        }
        }
    },

наконец-то выполняем composer require 'drupal/toolbar_themes'

и видим что модуль скачался из нашего issue форка

  - Syncing drupal/toolbar_themes (dev-custom 3149099) into cache
  - Installing drupal/toolbar_themes (dev-custom 3149099): Cloning 3149099 from cache

Authors

ivnish Drupal FullStack Developer, модератор drupal.ru
marassa Друпалист-любитель