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 el getOperationsConfiguration()
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í;
private function getOperationsConfiguration(
array $compiledPathsList
) {
$excludePatterns = [];
foreach ($this->excludedPathsList as $excludedPaths) {
$excludePatterns = array_merge($excludedPaths, $excludePatterns);
}
return [
OperationFactory::APPLICATION_CODE_GENERATOR => [
'paths' => [
$compiledPathsList['application'],
$compiledPathsList['library'],
$compiledPathsList['generated_helpers'],
],
'filePatterns' => ['php' => '/\.php$/'],
'excludePatterns' => $excludePatterns,
]
];
}
Esto fue bastante bien, el tiempo de compilación se redujo drásticamente;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Opuesto a;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
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í;
setup / src / Magento / Setup / Module / Di / App / Task / Operation /
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.