Quais comandos de compilação são necessários no modo de desenvolvedor e quando?

24

Alguém pode me dar instruções quando executar quais comandos de compilação no modo de desenvolvedor Magento 2? Ainda não tenho certeza se entendi direito.

Nos devdocs, o modo de desenvolvedor é descrito da seguinte maneira:

  • Os arquivos de exibição estática não são armazenados em cache; eles são gravados no diretório pub / static do Magento toda vez que são chamados

Isso significa que cada arquivo individual em pub / static é gerado quando solicitado e você nunca precisa ligar setup:static-content:deploy? Isso contradiz minha experiência. Ou posso excluir qualquer arquivo e eles serão regenerados? Além disso, imagens, arquivos CSS e JS parecem ser tratados de maneira diferente.

A página de documentação do modo de desenvolvedor não diz nada sobre compilação de código, mas acho que também havia uma diferença, portanto não era necessário executar setup:di:compiledepois de todas as alterações nos di.xmlarquivos. Está correto? Em caso afirmativo, como a geração de código funciona no modo de desenvolvedor?

Em outras palavras: cache à parte, quais comandos eu preciso executar após quais alterações?

Fabian Schmengler
fonte

Respostas:

27

preste atenção: experimentei que, no modo de desenvolvedor, excluir o pub/staticrecurso quebrará o mecanismo porque você se livra do .htaccessarquivo que faz a mágica nessa pasta.

Se você mantiver o pub/static/.htaccessarquivo no modo de desenvolvedor, não precisará executar nenhum comando de compilação: o Magento criará links simbólicos para os arquivos assim que solicitados. Isso significa que as alterações nos ativos estáticos serão visíveis imediatamente, desde que você também tenha o cache desativado.

Você pode excluir o pub/static/frontendoupub/static/adminhtml vez disso.

No modo padrão, os ativos são materializados empub/static subpasta, o que significa que são criados (copiados, não vinculados) na primeira solicitação. Se você os modificar, precisará liberar o cache para atualizá-los.

No modo de produção, os ativos não são materializados (causando erro HTTP 404 mediante solicitação) até você executar obin/magento setup:static-content:deploy comando.

Espero que ajude.

Alessandro Ronchi
fonte
E a compilação de DI?
Erfan
@ Erfan, o que você quer dizer com mais precisão?
Alessandro Ronchi
2
A pergunta também faz perguntas sobre o efeito do modo de implantação na compilação de DI. Acabei de fazer um teste rápido e, se você estiver no modo de desenvolvedor, não precisará compilar o DI para que as alterações di.xmlsejam exibidas (parece que a geração de código é feita em tempo real por página atingida?) De qualquer forma, pensei que seria uma boa adição à sua já boa resposta!
Erfan
Você está certo @Erfan
Alessandro Ronchi
1+ Obrigado irmão. Funcionou como um encanto. Tive uma experiência muito ruim executando comandos de implantação repetidamente para obter minhas alterações de menos para css, mesmo no modo de desenvolvedor. Copiei .htaccess de outro projeto e colei no local mencionado. Khalaaas!
Umar Yousaf
4

da minha experiência, você não precisa executar nenhum comando para geração de código / arquivo estático no modo de desenvolvedor.

Se os arquivos estáticos não foram gerados, pode haver outro problema.

Vejo duas razões para isso à primeira vista:

  • O modo de desenvolvedor não está funcionando corretamente. talvez a ativação tenha falhado por algum motivo
  • a reescrita para arquivos estáticos no pub / static.php não está funcionando
David Verholen
fonte
11
Meu arquivo menos em pub / static não é gerado novamente. Você está com esse problema? Como torná-lo auto-regenerado
mrtuvn
É importante que o modo de desenvolvedor esteja ativo e também que as reescritas estejam funcionando, pois qualquer solicitação para arquivos estáticos é reescrita para pub / static.php primeiro, que gera o arquivo (no modo de desenvolvedor) em pub / static, se ainda não estiver presente
David Verholen 23/03
4

Isso significa que cada arquivo individual em pub / static é gerado quando solicitado e você nunca precisa ligar setup:static-content:deploy? Isso contradiz minha experiência. Ou posso excluir qualquer arquivo e eles serão regenerados?

Sim. Mas, de acordo com minha experiência, isso não funciona na maioria das vezes. Pode ser um bug. A melhor solução é excluir o pub/staticconteúdo e implantar o conteúdo estático novamente sempre que você alterar o arquivo estático (js, css, html etc.), mesmo que você já tenha ativado o modo de desenvolvedor. Minha própria pergunta sobre isso.

Janaka Dombawela
fonte
Depende da maneira como você a vê. Se você deseja executar setup: static-content: deploy sempre que fizer uma alteração, levará anos para concluir um projeto, porque basicamente você cria todos os arquivos da sua loja quando atualiza apenas um arquivo. Portanto, minha solução foi sobrescrever os arquivos no pub / static e limpar o cache para ver minhas alterações. Quando estiver satisfeito com meus resultados, irei ao meu tema ou aos arquivos de módulos personalizados para substituir meus arquivos principais e, em seguida, execute setup: static-content: deploy para atualizar meus arquivos estáticos.
Wolfgang Leon
4

Apenas para esclarecer os três modos diferentes (fonte: curso Magento U Fundamentals). Em negrito, os pontos específicos relacionados à sua pergunta.

Modo de desenvolvedor

  • A materialização de arquivo estático não está ativada.
  • Exceções não capturadas exibidas no navegador
  • Exceções lançadas no manipulador de erros, não registradas
  • Logon do sistema var/report, altamente detalhado.

Você deve usar o modo Desenvolvedor enquanto estiver desenvolvendo personalizações ou extensões. O principal benefício desse modo é que as mensagens de erro são visíveis para você. Não deve ser usado na produção devido ao seu impacto no desempenho. No modo Desenvolvedor, os arquivos de exibição estática são gerados sempre que solicitados. Eles são gravados no pub/staticdiretório, mas esse cache não é usado. Isso tem um grande impacto no desempenho, mas todas as alterações que um desenvolvedor faz para exibir arquivos são imediatamente visíveis.

Exceções não capturadas são exibidas no navegador, em vez de serem registradas. Uma exceção é lançada sempre que um assinante de evento não pode ser chamado.

O login do sistema var/reporté altamente detalhado nesse modo.

Modo de produção

  • Fase de implantação no sistema de produção; melhor desempenho
  • Exceções não são exibidas para o usuário - gravadas apenas nos logs.
  • Este modo desativa a materialização estática de arquivos.
  • A docroot do Magento pode ter permissões somente leitura.

Você deve executar o Magento no modo Produção, uma vez implantado em um servidor de produção.

O modo de produção oferece o melhor desempenho no Magento 2.

O aspecto mais importante desse modo é que os erros são registrados no sistema de arquivos e nunca são exibidos ao usuário. Nesse modo, os arquivos de exibição estática não são criados dinamicamente quando solicitados; em vez disso, eles precisam ser implantados no pub/staticdiretório usando a ferramenta de linha de comando. As páginas geradas conterão links diretos para os recursos da página implantados.

Quaisquer alterações para visualizar arquivos requerem a execução da ferramenta de implantação novamente.

Como os arquivos de exibição são implementados usando a ferramenta CLI, o usuário da web precisa ter acesso de gravação. O pub/staticdiretório Magento pode ter permissões somente leitura, que é uma configuração mais segura em um servidor acessível ao público.

Modo padrão

  • Usado quando nenhum outro modo é especificado
  • Oculta exceções do usuário e as grava nos arquivos de log
  • A materialização de arquivo estático está ativada.
  • Não recomendado / não otimizado para produção: o cache afeta negativamente o desempenho.

Como o próprio nome indica, o modo Padrão é como o software Magento opera, se nenhum outro modo for especificado.

Nesse modo, as erros são registradas nos arquivos var/reportse nunca são mostradas a um usuário. Os arquivos de exibição estática são materializados rapidamente e armazenados em cache.

Ao contrário do modo de desenvolvedor, as alterações no arquivo de exibição não são visíveis até que os arquivos de exibição estática gerados sejam limpos.

O modo padrão não é otimizado para um ambiente de produção, principalmente devido ao impacto adverso no desempenho de arquivos estáticos serem materializados em tempo real, em vez de gerá-los e implantá-los previamente .

Em outras palavras, criar arquivos estáticos em tempo real e armazená-los em cache tem um impacto maior no desempenho do que gerá-los usando a ferramenta de linha de comando de criação de arquivos estáticos.

Raphael na Digital Pianism
fonte