Quando inicio um novo projeto M2, a primeira coisa a fazer é instalar o núcleo via compositor:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition
Agora posso escrever meu (s) módulo (s) personalizado (s) e tema (s) em app/code. Eu adicionaria minha pasta composer.*e toda a app/codepasta ao meu VCS. Até agora está tudo bem.
Suponha que agora eu queira usar algumas ferramentas de construção para o meu projeto, digamos Grunt ou Gulp.
Se eu confirmar meu
Gruntfile.js, isso será sobrescrito pelomagento/magento2-basepacote quando executarcomposer installdepois de clonar o repositório.Se eu confirmar minha
gulpfile.js, não posso realmente definir minhas dependências em apackage.json, porque ela também seria substituída pormagento/magento2-base.Se eu decidir usar a configuração Grunt do Magento e quiser personalizá-la editando os arquivos em
/dev/tools/grunt(por exemplothemes.js), não posso, porque minhas alterações seriam substituídas pormagento/magento2-base.
Meu entendimento é que você realmente não pode fazer muito na raiz do seu documento. Obviamente, existem muitas soluções para esse problema:
- Eu poderia executar um
git checkout -logo após a instalação para redefinir meus próprios arquivos - Eu poderia armazenar meus arquivos de compilação em uma pasta dedicada,
/buildpor exemplo - Eu poderia usar uma ferramenta de compilação diferente, como Phing, Ant ou Rake (meus desenvolvedores de front-end não ficariam tão felizes)
- Eu poderia substituir
magento/magento2-basepor um pacote personalizado que possui um mapeamento personalizado para arquivos principais (não é realmente ótimo, mas ei, é uma opção)
Pessoalmente, não gosto de todas essas opções, então gostaria de saber se existe uma maneira preferida ou melhor de alcançar o que estou tentando fazer.
Alguém está tendo o mesmo problema? Como você resolveu isso? Como você estrutura seu projeto no VCS?
ATUALIZAR
Um ponto extra relacionado à configuração do projeto. Nas minhas experiências, notei que o instalador do Magento compositor possui um sinalizador para substituição de arquivos:
"extra": {
"magento-force": "override"
}
Ele é tratado internamente como um booleano se não me engano, então tentei configurá-lo falsepara ignorar a substituição. Quando executo, composer installminha instalação falha devido aos arquivos já estarem presentes. Basicamente, se eu não permitir que o Magento substitua meus arquivos, não posso instalá-lo.
Qual é o objetivo dessa bandeira então? É apenas suposto executar uma verificação para mim? Para mim, não faz muito sentido ser sincero, mas talvez alguém possa esclarecer um pouco sobre o assunto.
Gruntfile.js, gulpfile.jse package.jsonproblema está resolvido. O problema abordado nesta pergunta ainda é aplicável às versões mais recentes do Magento 2 quando você precisar alterar themes.js, index.phpou .htaccesspor exemplo.