Preciso olhar manualmente para o meu módulo sempre que usar um pedaço do código Magento principal e adicionar uma linha de require: ... ao compositer.json?
Sim, toda vez em seu código você usa qualquer coisa de um módulo principal, é necessário adicioná-lo às necessidades do seu compositor. Como você provavelmente deseja que sua ordem de carregamento seja posterior ao módulo principal, sugiro também adicioná-lo ao seu module.xml
arquivo na seção de sequência.
Ou existe uma ferramenta automatizada que pode fazer isso por mim?
Ainda não me deparei com isso. Se houver, por favor me avise. Seria uma ferramenta bastante sofisticada e provavelmente exigiria uma cobertura de teste substancial e, em seguida, executa uma matriz de versões diferentes para produzir um conjunto de trabalho.
Como especifico uma versão para incluir no meu compositer.json? Deve ser a versão específica do módulo contra a qual desenvolvi? Ou deveria haver algum tipo de curinga envolvido? Ou preciso tomar uma decisão com base em tradeoffs? Em caso afirmativo, quais são as compensações envolvidas para cada estilo de versão especificando?
Opções para definir um número de versão
100.0.2
Funciona apenas quando esta versão específica
100.0.*
*
é um curinga e pode ser substituído por qualquer número da versão
100.0.0
, 100.0.1
, ...
,100.0.120
~100.0.2
Faz 2 um curinga que só pode ir até então 100.0.2
, 100.0.3
, ...
,100.0.120
^100.0.2
Permite que qualquer liberar até 101 modo 100.0.2
, 100.0.3
, ...
, 100.1.0
,100.2.5
Para as opções de 2 a 4, se suas configurações de estabilidade permitirem, também incluiria versões como 100.0.1-beta
Uso pratico
A opção 1.) é a mais cautelosa, você sabe em qual versão foi desenvolvida e só aceita trabalhar com essa versão específica - seu módulo pode ser instalado apenas ao lado desse módulo específico nessa versão. Todas as outras tentativas de instalação / atualização falharão com uma mensagem do compositor destacando que ele não consegue encontrar um conjunto instalável de componentes.
Opção 2.) Eu acho que pode ser pensado como não opção, como é coberto pela Opção 3.) se você usá-lo como ~100.0.0
Opção 3.) Seja compatível desde que nenhum novo recurso seja introduzido
Opção 4.) Seja compatível desde que não sejam introduzidas alterações
Trade Offs
1 Sua extensão funciona apenas para 1 versão de um módulo Magento (tecnicamente, se não houver alterações em um módulo, o número da versão não deve aumentar e várias versões do Magento Project poderiam teoricamente incluir o mesmo módulo principal do Magento com a mesma versão. não vi isso e parece que requer algumas alterações de processo no final do Magento, veja aqui). Como você está tão intimamente ligado a uma versão do módulo principal do Magento, você acaba com muitos lançamentos e versões de sua própria extensão, se quiser permanecer compatível.
3-4 Sua extensão funciona com várias versões do Magento e você não precisa lançar versões diferentes da sua extensão toda vez que o Magento lança uma nova versão. A desvantagem aqui é que você reivindica compatibilidade, mesmo que uma alteração possa ser introduzida no Magento que seja incompatível com seu próprio código. Esse risco é real, pois a definição de versão semântica do Magento para seus próprios lançamentos de módulo se estende apenas ao que está marcado com uma @api
anotação (mais sobre isso nesta edição do GitHub ) com seu escopo limitado.
tl; dr;
100.0.2
Jogue com segurança, muitas versões para manter para você o
^100.0.2
Semantic Versioning como deve funcionar, menos versões para você, mas com maior risco devido ao escopo limitado atualmente de @api
classes e métodos anotados. Se você tivesse uma extensão 100% usando classes e métodos sancionados, essa seria a escolha óbvia.