¿Es posible pregenerar código para un módulo específico? IE: puedo generar todo el código en el sistema con
php bin/magento setup:di:compile
Sin embargo, esto puede llevar mucho tiempo. Me gustaría generar previamente solo los archivos para un módulo específico.
php bin/magento setup:di:compile Pulsestorm_Commercebug
El problema específico que estoy tratando de resolver es solucionar este problema con algunos complementos que no se reconocen en el modo desarrollador / predeterminado.
Respuestas:
Respuesta corta: No. Eso no es posible con las herramientas enviadas con Magento ahora.
Explicación: Tenemos que distinguir la generación y compilación de código . El compilador hace las dos cosas. Para ambas operaciones necesitamos leer la configuración de todos los demás módulos de magento, de lo contrario su salida será incorrecta o no estará completa.
La compilación para un módulo no tiene sentido, ya que magento no funcionará con la configuración compilada para un solo módulo.
La generación de un módulo puede tener sentido, pero de todos modos tendremos que leer la configuración y las firmas del constructor de todos los demás módulos instalados. Sin él, no se podría generar todo el código. Por lo tanto, dicha operación no sería mucho más rápida que la compilación completa. Podemos pensar en ello, pero creo que el error al que hizo referencia se solucionará antes de que se implemente el comando.
fuente
El
bin/magento
ejecutable de Magento es solo un componente de la consola Symfony. Esto significa que puede encontrar el archivo individual responsable de un solo comando. El nombre siempre es el mismo, por lo que para la configuración: di: compile puede encontrar DiCompileCommand.php (setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).Siempre ejecutará el
exeucte()
método, así que ahí es donde debemos mirar. En esta función, verá que$operations
se establece una var, que se llena con elgetOperationsConfiguration()
método. Este método básicamente le dice al DiCompileCommand qué compilar.Lo primero que probé es devolver solo la parte del generador de código de la aplicación, así;
Esto fue bastante bien, el tiempo de compilación se redujo drásticamente;
Opuesto a;
Por supuesto, esto era de esperarse ya que eliminamos varias cosas. Pero no especificó qué archivos desea generar. No todos los archivos se pueden generar por módulo, ya que, por ejemplo, las clases de Intercepción pueden depender de múltiples módulos y, por lo tanto, le darían una salida limitada de funcionalidad si solo ejecutara esto para un módulo.
Puede encontrar los generadores responsables aquí;
Cada clase tiene un foreach, que le permitirá agregar un if / else con un salto continuo para omitir ciertos módulos / rutas. Tal vez sería útil consultar la documentación de Argumentos de entrada de componentes de la consola Symfony sobre cómo alimentar argumentos en el comando.
fuente
puedes reconocer por
paquete> módulo> registro.php
y que correr
Registration.php reconocerá el módulo y compilará su módulo personalizado.
Espero que esto ayude.
fuente
Cuando cambie su constructor para la clase que se generó en la solicitud anterior, se romperá. Si se encuentra en este tipo de necesidades se limite a eliminar
var/cache
,var/generation
yvar/di
(si existe) y actualiza la página. Asegúrese de que el modo sea el desarrollador en el que está trabajando.(No estoy diciendo de esta manera que magento no compilará ni generará código base, sí lo hará. De esta manera, da un poco de alivio al ejecutar "setup: di: compile" cada vez que realice cambios en sus rutas o clases)
fuente