Wybierz plik do zainstalowania przez Composer w oparciu o wersję Magento

11

Byłoby bardzo wygodne włączenie wielu wersji kodu do modułu kompozytora i pozwolenie kompozytorowi ustalić, którą wersję wdrożyć, w oparciu o wersję docelową instalacji Magento.

Na przykład dla Magento> 1.7 użyj pliku system.xml, który zawiera tooltipzagnieżdżone groupi inne nowoczesne funkcje, ale w przypadku starszych wersji Magento użyj zredukowanej wersji pliku, która nie zawiera tych (łamających) deklaracji.

To podejście może działać również w przypadku wielu innych plików w standardowej strukturze modułów.

Opcje dla rozmieszczenia kompozytora są map, modmanlub package.xmlAFAIK, z których żaden nie ma żadnego wywiadu dotyczących systemu docelowego. Ta package.xmlopcja prawdopodobnie nie ulegnie zmianie, ale mapmogłaby ...

Wydaje mi się, że byłoby wielu programistów rozszerzeń, którzy skorzystaliby z wdzięcznego podejścia do degradacji. Czy ktoś znalazł rozwiązanie tego problemu?

Jonathan Day
źródło

Odpowiedzi:

8

Nie mam obejścia i nie było to dla mnie problemem, ale mam propozycję, która mogłaby działać:

  1. Musisz utrzymywać osobne gałęzie wersji, aby kierować reklamy na różne wersje Magento. Wdrażanie różnych plików w tej samej wersji w zależności od magii kompozytora nie zadziała dobrze. Twoje rozszerzenie może mieć 1.xgałąź dla kompatybilności ze starszymi wersjami Magento (na przykład do 1.6) i 2.xgałąź dla nowocześniejszych wersji. Dodaj odpowiednio tagi wersji. Oczywiście możesz utrzymywać tyle gałęzi, ile chcesz i napisać najlepszy kod dla każdej wersji Magento, ale IMHO nie jest to warte wysiłku i jedna „nowoczesna” i jedna „starsza” gałąź powinna wystarczyć. Od Ciebie zależy, jak daleko chcesz być kompatybilny wstecz z „nowoczesną” gałęzią, może to być nawet najnowsza, mniejsza wersja.
  2. Dodaj wymaganie dla Magento w ten sposób:

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

    i

    "require": {
        "magento/magento-ce": ">=1.8"
    }
  3. Teraz pojawia się minus, część, na którą nie masz już pełnego wpływu: nie ma oficjalnego magento/magento-cepakietu, więc użytkownicy Twojego rozszerzenia prawdopodobnie zainstalują Magento z serwera zarządzanego przez społeczność, takiego jak https://github.com/firegento/magento -ce lub z własnego repozytorium. Muszą one zastąpićmagento/magento-ce pakiet „wirtualny” tej samej wersji (istnieje symbol zastępczy self.version , aby nie trzeba było dostosowywać pliku composer.json dla każdej aktualizacji wersji):

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

Będzie to działać dobrze tylko wtedy, gdy powyższa konwencja zostanie powszechnie zaakceptowana i tylko dla użytkowników, którzy faktycznie instalują Magento za pomocą zależności kompozytora, która prawdopodobnie nie jest większość.

Bardziej realistycznym podejściem jest po prostu wykonanie kroku 1 i doradzenie użytkownikom, aby wymagali innej gałęzi / innej głównej wersji, jeśli używają wersji Magento starszej niż 1.x.

Fabian Schmengler
źródło