Choisissez le fichier à installer via Composer en fonction de la version de Magento

11

Il serait très pratique d'inclure plusieurs versions de code dans un module Composer et de demander à Composeur de déterminer la version à déployer, en fonction de la version Magento de la cible d'installation.

Par exemple, pour Magento> 1.7, utilisez le fichier system.xml qui inclut des fonctions tooltipimbriquées groupet d'autres fonctionnalités modernes, mais pour les anciennes versions de Magento, utilisez une version allégée du fichier qui n'inclut pas ces déclarations (de rupture).

Cette approche pourrait également fonctionner pour de nombreux autres fichiers dans une structure de module standard.

Les options de déploiement du compositeur sont map, modmanou package.xmlAFAIK, aucune d'entre elles n'a d'intelligence concernant le système cible. Il package.xmlest très peu probable que l'option change, mais mappourrait ...

Il me semble qu'il y aurait beaucoup de développeurs d'extensions qui bénéficieraient de l'approche de dégradation gracieuse. Quelqu'un a-t-il trouvé une solution pour cela?

Jonathan Day
la source

Réponses:

8

Je n'ai pas de solution de contournement et ce n'était pas encore un problème pour moi, mais j'ai une proposition qui pourrait fonctionner:

  1. Vous devez gérer des branches de versions distinctes pour cibler différentes versions de Magento. Le déploiement de différents fichiers dans la même version en fonction de la magie du compositeur ne fonctionnera pas bien. Ainsi, votre extension pourrait avoir une 1.xbranche pour la compatibilité avec les anciennes versions de Magento (par exemple jusqu'à 1.6) et une 2.xbranche pour les versions plus modernes. Ajoutez des balises de version en conséquence. Bien sûr, vous pouvez conserver autant de branches que vous le souhaitez et écrire le meilleur code pour chaque version de Magento, mais à mon humble avis, cela ne vaut pas la peine et une branche "moderne" et une branche "héritée" devraient suffire. C'est à vous de voir jusqu'où vous voulez être rétrocompatible avec la branche "moderne", il peut même s'agir de la dernière version mineure.
  2. Ajoutez une exigence pour Magento comme ceci:

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

    et

    "require": {
        "magento/magento-ce": ">=1.8"
    }
  3. Maintenant vient l'inconvénient, la partie où vous n'avez plus d'influence: il n'y a pas de magento/magento-cepackage officiel , donc les utilisateurs de votre extension installeront probablement Magento à partir d'un miroir géré par la communauté comme https://github.com/firegento/magento -ce ou à partir de leur propre référentiel. Ceux-ci doivent remplacer le magento/magento-cepackage "virtuel" de la même version (il y a un espace réservé self.version , de sorte que vous n'avez pas besoin d'ajuster le composer.json pour chaque mise à jour de version):

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

Cela ne fonctionnera bien que si la convention ci-dessus est largement acceptée et uniquement pour les utilisateurs qui installent réellement Magento lui-même via la dépendance du compositeur, qui n'est probablement pas la majorité.

Donc, une approche plus réaliste consiste à suivre simplement l'étape 1 et à conseiller à vos utilisateurs d'exiger une version principale de branche / différent différente, s'ils exécutent une version de Magento antérieure à 1.x.

Fabian Schmengler
la source