Drupal 8.7.7 и .info.yml
Drupal 8.7.7+ будет поддерживать расширения, совместимые как с Drupal 8, так и с 9!
Drupal 8.7.7 ожидается уже на этой неделе и является первым выпуском Drupal, поддерживающим расширения, совместимые с несколькими мажорными версиями Drupal. Это же грандиозно!
Drupal 9 запланирован на 3 июня 2020 года, и мы стремимся сделать переход как можно более плавным. Фактически мы встроим Drupal 9 в Drupal 8 с устаревшими API и опциональной поддержкой новых зависимостей (Symfony 4.4 становится ближе, в то время как Drupal 8.7.0 уже был совместим с Twig 2). Расширения, следующие за этими устаревшими версиями и обеспечивающие совместимость с обновленными зависимостями, могут иметь кодовые базы, совместимые с Drupal 8 и 9 одновременно, что означает меньшую нагрузку на поддержку и более раннюю совместимость с Drupal 9. В марте 48% проектов, представленных на Drupal.org, уже были «совместимы с Drupal 9» (как мы могли заметить в то время), и к июлю увеличились на 54% (Вау). У этих проектов теперь будет еще одна вещь, добавление в файл info.yml одной строчки, чтобы их существующая кодовая база также могла работать на Drupal 9.
"Поддерживающие Drupal, спасибо! Вы уже внесли большой вклад в успешную работу Drupal 9. Проекты, которые «совместимы с Drupal 9» (столько, сколько мы знаем сейчас), достигли 54% с 48% с марта. Устаревшее использование API в целом уменьшается.
Вы классные, так держать!"
Ядро: ключ 8.x уже не справляется
Drupal 8 просматривает файлы расширения .info.yml и проверяет core-ключ (8.x), можно ли использовать расширение с Drupal 8. К сожалению, этого уже недостаточно из-за дополнений в API. Вы не могли указать, что расширение было совместимо только с Drupal 8.4+. Можно было придумать хитрые приемы с зависимостями от определенных версий модуля, но вы всё равно не могли указать в зависимостях патч-релиз, например. . Если ваше расширение зависело от наличия исправления, вы не можете установить зависимость от Drupal 8.4.1+.
Представляем ключ: core_version_requirement
При решении этой проблемы стало очевидно, что решение с помощью существующего core: 8.x ключа вызовет проблемы обратной совместимости с существующими сайтами Drupal 8. Формат значения не может быть изменен без проблем, поэтому был введен новый ключ core_version_requirement. Теперь это позволяет зависеть от основных и вспомогательных версий ядра, а также указывать требования к нескольким версиям даже между несколькими второстепенными версиями Drupal. Например, если вам понадобится исправление, которое должно быть включено в Drupal 8.7.23 и 8.8.3 (воображаемые будущие версии), но вам не нужна дополнительная версия, вы должны использовать следующее, делая ваш модуль несовместимым с версиями до определенного исправления, которые вам нужны в обеих второстепенных ветках, а также несовместимы со всеми более старыми ветками Drupal 8:
name: My Module
type: module
core_version_requirement: ~8.7.23 || ~8.8.3
Раньше такая точность никогда не была возможна!
Новая функция доступна в 8.7.7, чтобы помочь подготовиться к Drupal 9, поскольку это позволяет также объявить совместимость Drupal 9 с существующей кодовой базой, которая у вас уже есть. Drupal 8.7.x получит поддержку безопасности вплоть до запланированного выпуска Drupal 9 3 июня 2020 года. Для расширений, которые поддерживают только Drupal 8.7.7 и более поздние версии, теперь вы можете использовать исключительно ключ core_version_requirement. Если расширение также совместимо с Drupal 9:
name: My Module
type: module
core_version_requirement: ^8.7.7 || ^9
Для расширений, которые также поддерживают более старые версии, вы должны также сохранить core-ключ. Ключ core_version_requirement будет игнорироваться старыми версиями Drupal, и новые версии будут проверять, что вы указали не конфликтующие требования в двух ключах (в отношении поддержки Drupal 8), поэтому для расширений, поддерживающих более старые версии ядра, core_version_requirement также может использоваться, он также может позволить быть совместимым с Drupal 9:
name: My Module
type: module
core: 8.x
core_version_requirement: ^8 || ^9
Подробнее об этом изменении читайте в уведомлении об изменении. Также ведется работа по поддержке метаданных зависимостей из composer.json для управления разрешением зависимостей в Drupal. Это будет сосуществовать с этим более простым подходом и предоставит более естественное решение для тех, кто уже использует composer для своих расширений. core_version_requirement будет ограничивать то, что Drupal будет устанавливать, в то время как composer.json будут ограничивать то, что будет скачиваться. Поскольку и Composer, и Drupal используют термин “установка” но они различаются, вот сравнительная таблица:
Что происходит с номерами версий проекта Drupal.org?
Теперь версия 8.x-1.3 расширения на drupal.org также может быть совместима с Drupal 9. Как это будет работать? Интеграция Drupal с composer уже игнорирует префикс 8.x из номеров версий и заботится только о конкретной версии проекта. Ядро Drupal уже устанавливает расширения только там, где соблюдаются требования совместимости ядра, независимо от того, какой номер версии был пакетом, который вы использовали для загрузки (модули 8.x уже могут быть совместимы только с 8.4+). Таким образом, окончательный план - полностью прекратить использование префикса 8.x в номерах расширений на drupal.org и вместо этого поддерживать семантические версии для добавленных расширений. В краткосрочной перспективе список проектов на Drupal.org также необходимо обновить, чтобы получать метаданные о зависимостях и использовать их для фильтров совместимости, вместо простого использования префикса номера версии.