Выберите файл для установки через Composer в зависимости от версии Magento

11

Было бы очень удобно включить несколько версий кода в модуль composer'd и заставить composer определить, какую версию развернуть, основываясь на версии Magento цели установки.

Например, для Magento> 1.7 используйте system.xml, который включает в себя tooltip, вложенные groupи другие современные функции, но для более старых версий Magento используйте урезанную версию файла, которая не включает эти (ломающиеся) объявления.

Этот подход может работать и для множества других файлов в стандартной структуре модуля.

Варианты развертывания композитора map, modmanили package.xmlAFAIK, ни один из которых не обладает какой-либо информацией о целевой системе. package.xmlВариант вряд ли изменится , но mapможет ...

Мне кажется, что было бы много разработчиков расширений, которые выиграли бы от подхода изящной деградации. Кто-нибудь нашел обходной путь для этого?

Джонатан Дэй
источник

Ответы:

8

У меня нет обходного пути, и это не было проблемой для меня, но у меня есть предложение, которое может сработать:

  1. Вы должны поддерживать отдельные ветки версий для таргетинга на разные версии Magento. Развертывание разных файлов в одной и той же версии в зависимости от магии композитора не будет работать хорошо. Таким образом, ваше расширение может иметь 1.xветку для совместимости со старыми версиями Magento (например, до 1.6) и 2.xветку для более современных версий. Добавьте теги версии соответственно. Конечно, вы можете поддерживать столько веток, сколько хотите, и писать лучший код для каждой версии Magento, но ИМХО это не стоит усилий, и одной «современной» и одной «устаревшей» ветки должно быть достаточно. Вам решать, насколько вы хотите быть обратно совместимыми с «современной» веткой, это может быть даже самая последняя минорная версия.
  2. Добавьте требование для Magento следующим образом:

    "require": {
        "magento/magento-ce": "1.4-1.7"
    }

    и

    "require": {
        "magento/magento-ce": ">=1.8"
    }
  3. Теперь наступает обратная сторона, часть, на которую вы больше не имеете полного влияния: официального magento/magento-ceпакета не существует, поэтому пользователи вашего расширения, вероятно, установят Magento из управляемого зеркалом сообщества, такого как https://github.com/firegento/magento. -ce или из их собственного хранилища. Они должны заменить «виртуальный» magento/magento-ceпакет той же версии (есть местозаполнитель self.version , так что вам не нужно настраивать composer.json для каждого обновления версии):

    "replace": {
        "magento/magento-ce": "self.version"
    }

Это будет хорошо работать только в том случае, если вышеуказанное соглашение получит широкое признание и только для пользователей, которые фактически устанавливают сам Magento через зависимость от композитора, что, вероятно, не является большинством.

Поэтому более реалистичным подходом является просто выполнить шаг 1 и посоветовать вашим пользователям требовать другую основную версию / другую версию, если они используют версию Magento старше 1.x.

Фабиан Шменглер
источник