magento 2 - ¿En qué caso necesitamos ejecutar este comando magento setup: di: compile?

12

¿En qué caso necesitamos ejecutar este comando magento setup:di:compile?

MrTo-Kane
fuente
Una vez que haya instalado nuevos módulos y desee borrar algunas directivas
Jaleel
¿Y algo mas?
MrTo-Kane
También cuando cambia al modo de producción porque en ese modo, no se genera contenido estático; todo se sirve desdepub/static
Steve Johnson

Respuestas:

8
  • Durante la implementación (es decir, cuando se realizaron cambios en un sistema en modo de producción)

    Tenga en cuenta que en el modo de producción (versiones 2.0.5 y anteriores) debe usar la compilación "multiinquilino". Solucionado en 2.0.6 y posterior.

    bin/magento setup:di:compile-multi-tenant

    Ver: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html

  • También puede usar la compilación en modo de desarrollo, lo que debería acelerar el sitio, pero por otro lado, ralentiza el desarrollo, ya que deberá ejecutar bin/magento setup:di:compilecada vez que agregue nuevas clases con dependencias (parámetros del constructor) o cambie las dependencias de las clases existentes .

    Esto es opcional, y probablemente no sea una buena idea. Si ya ejecutó la compilación en su entorno de desarrollo, elimine los archivos var/dipara deshabilitarla.

Fabian Schmengler
fuente
1
configuración: di: compile-multi-tenant ha sido eliminado
Antonino Bonumore
¿Podemos obtener alguna confirmación sobre si eliminar el truco de la carpeta var / di funciona? No parece para mí
Wildcard27
@ Wildcard27 ¿y si también elimina los directorios var/generation?
Fabian Schmengler
@FabianSchmengler Acabo de crear una Actionpara probar. - Cargué la página, error. - Borrado diy generationcarpetas, recargado, funciona. - Agregar nueva dependencia, recargar página, error. Sin embargo, no dise genera ninguna carpeta. - Eliminar de generationnuevo, volver a cargar, funciona. Conclusión: elimine la carpeta de generación después de agregar dependencias y no tendrá que ejecutar setup:di:compile. Si alguien más pudiera confirmar esto, sería increíble.
Comodín
1

Según mi comentario sobre otra respuesta:

Puede evitar ejecutar el setup:di:compilecomando cada vez que agregue una dependencia simplemente eliminando las carpetas var/diy antes de volver a cargar la página .var/generation

A partir de mis propias pruebas, Magento recreará la var/generationcarpeta, pero no la var/dicarpeta hasta que setup:di:compilese vuelva a ejecutar. Esto significa que solo debe tener la var/generationcarpeta para eliminar.

Curiosamente, esto también funciona con pub/static/*y setup:static-content:deploy. Esto se debe a que Magento parece crear enlaces simbólicos a los archivos necesarios si el contenido estático se crea mediante la recarga de la página, en lugar de la CLI.

Las personas en nuestra oficina tenían problemas para ejecutar los comandos anteriores mientras usaban Docker para Mac. El procesamiento del archivo fue demasiado lento. Al usar los pasos anteriores, el desarrollo debería ser mucho más rápido.

Probablemente sea mejor tener en cuenta que esto no funcionará cuando esté en modo de producción o predeterminado. Esto es solo para el desarrollo. Como lo menciona Fabian Schmengler, la recarga inicial de la página será más lenta de lo normal, pero no debería ser tan lenta como la ejecución setup:static-content:deployo `setup: di: compile.

Como referencia, estoy ejecutando la versión 2.1.5 .

Comodín27
fuente
0

Tomado del blog de Alan Storm .

Compilación de inyección de dependencia

Para comenzar, debemos explicar el problema que estos comandos están tratando de resolver. Cuando envía un sistema Magento 2 a producción, debe ejecutar el siguiente comando

php bin/magento setup:di:compile

Este comando escanea el código en su sistema y genera previamente una serie de cosas (principalmente relacionadas con el sistema del administrador de objetos y la inyección de dependencia) que Magento carga dinámicamente cuando se ejecuta en modo desarrollador. Esto es tanto una cuestión de rendimiento como de seguridad, y discutirlo en su totalidad está más allá del alcance de este artículo.

Suresh Chikani
fuente
1
"Esto es tanto una cuestión de rendimiento como de seguridad, y discutirlo en su totalidad está más allá del alcance de este artículo". Esto lo delató. copia flagrante de Alan Storm: alanstorm.com/magento_2_di_compile_pre-scan_with_commerce_bug
Fabian Schmengler