Escolha qual arquivo instalar via Composer com base na versão Magento

11

Seria muito conveniente incluir várias versões de código em um módulo do compositor e fazer com que o compositor resolvesse qual versão implantar, com base na versão Magento do destino da instalação.

Por exemplo, para Magento> 1.7, use o system.xml que inclui recursos tooltipaninhados groupe outros modernos, mas para versões mais antigas do Magento, use uma versão simplificada do arquivo que não inclua essas declarações (quebras).

Essa abordagem também pode funcionar para vários outros arquivos em uma estrutura de módulo padrão.

As opções para implantação do compositor são map, modmanou package.xmlAFAIK, nenhuma das quais possui inteligência sobre o sistema de destino. A package.xmlopção é muito improvável que mude, mas mappoderia ...

Parece-me que muitos desenvolvedores de extensões se beneficiariam com a abordagem de degradação graciosa. Alguém encontrou uma solução alternativa para isso?

Jonathan Day
fonte

Respostas:

8

Não tenho uma solução alternativa e ainda não foi um problema para mim, mas tenho uma proposta que poderia funcionar:

  1. Você precisa manter ramificações de versão separadas para atingir diferentes versões do Magento. A implantação de arquivos diferentes na mesma versão, dependendo da mágica do compositor, não funcionará bem. Portanto, sua extensão pode ter uma 1.xramificação para compatibilidade com versões mais antigas do Magento (por exemplo, até 1.6) e uma 2.xramificação para versões mais modernas. Adicione tags de versão de acordo. É claro que você pode manter quantas ramificações quiser e escrever o melhor código para cada versão do Magento, mas IMHO isso não vale a pena e uma ramificação "moderna" e uma "herdada" deve ser suficiente. Depende de você, até onde você quer ser compatível com o ramo "moderno", ele pode até ser apenas a versão menor mais recente.
  2. Adicione um requisito para o Magento assim:

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

    e

    "require": {
        "magento/magento-ce": ">=1.8"
    }
  3. Agora vem a desvantagem, a parte em que você não tem mais influência total: não há magento/magento-cepacote oficial , portanto os usuários da sua extensão provavelmente instalarão o Magento a partir de um espelho gerenciado pela comunidade como https://github.com/firegento/magento -ce ou de seu próprio repositório. Eles devem substituir o magento/magento-cepacote "virtual" da mesma versão (existe um espaço reservado self.version , para que você não precise ajustar o composer.json para cada atualização de versão):

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

Isso só funcionará bem se a convenção acima for amplamente aceita e somente para usuários que realmente instalam o Magento via dependência do compositor, o que provavelmente não é a maioria.

Portanto, uma abordagem mais realista é seguir a etapa 1 e aconselhar os usuários a exigir uma versão principal diferente / diferente, se executar uma versão Magento anterior à 1.x.

Fabian Schmengler
fonte