Elija qué archivo instalar a través de Composer basado en la versión de Magento

11

Sería muy conveniente incluir múltiples versiones de código en un módulo compositor y hacer que el compositor determine qué versión implementar, en función de la versión de Magento del destino de la instalación.

Por ejemplo, para Magento> 1.7, use system.xml, que incluye funciones tooltipanidadas groupy otras funciones modernas, pero para versiones anteriores de Magento, use una versión reducida del archivo que no incluya esas declaraciones (de ruptura).

Este enfoque también podría funcionar para muchos otros archivos en una estructura de módulo estándar.

Las opciones para la implementación del compositor son map, modmano package.xmlAFAIK, ninguna de las cuales tiene ninguna inteligencia con respecto al sistema de destino. La package.xmlopción es muy poco probable que cambie, pero mappodría ...

Me parece que habría muchos desarrolladores de extensiones que se beneficiarían del enfoque de degradación elegante. ¿Alguien ha encontrado una solución para esto?

Jonathan Day
fuente

Respuestas:

8

No tengo una solución alternativa y todavía no era un problema para mí, pero tengo una propuesta que podría funcionar:

  1. Debe mantener ramas de versión separadas para apuntar a diferentes versiones de Magento. Implementar diferentes archivos en la misma versión dependiendo de la magia de algún compositor no funcionará bien. Por lo tanto, su extensión podría tener una 1.xrama para compatibilidad con versiones anteriores de Magento (por ejemplo, hasta 1.6) y una 2.xrama para versiones más modernas. Agregue etiquetas de versión en consecuencia. Por supuesto, puede mantener tantas ramas como desee y escribir el mejor código para cada versión de Magento, pero en mi humilde opinión, no vale la pena el esfuerzo y una rama "moderna" y una "heredada" deberían ser suficientes. Depende de usted, hasta qué punto quiere ser compatible con la rama "moderna", incluso puede ser la última versión menor.
  2. Agregue un requisito para Magento como este:

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

    y

    "require": {
        "magento/magento-ce": ">=1.8"
    }
  3. Ahora viene el inconveniente, la parte en la que ya no tienes influencia total: no hay un magento/magento-cepaquete oficial , por lo que los usuarios de tu extensión probablemente instalarán Magento desde un espejo administrado por la comunidad como https://github.com/firegento/magento -ce o desde su propio repositorio. Estos deben reemplazar el magento/magento-cepaquete "virtual" de la misma versión (hay un marcador de posición self.version , por lo que no necesita ajustar el composer.json para cada actualización de versión):

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

Esto solo funcionará bien si la convención anterior se acepta ampliamente y solo para los usuarios que realmente instalan Magento a través de la dependencia del compositor, que probablemente no sea la mayoría.

Por lo tanto, un enfoque más realista es seguir el paso 1 y aconsejar a sus usuarios que requieran una versión principal diferente o diferente, si ejecutan una versión de Magento anterior a 1.x.

Fabian Schmengler
fuente