O bin/magento
executável do Magento é apenas um componente do Symfony Console. Isso significa que você pode encontrar o arquivo individual responsável por um único comando. A nomeação é sempre a mesma; portanto, para setup: di: compile, você pode encontrar o DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
Ele sempre executa o exeucte()
método, e é aí que precisamos procurar. Nesta função, você verá um $operations
var definido, preenchido pelo getOperationsConfiguration()
método Esse método basicamente diz ao DiCompileCommand o que compilar.
A primeira coisa que tentei é retornar apenas a parte do gerador de código do aplicativo;
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,
]
];
}
Isso correu muito bem, o tempo de compilação foi reduzido drasticamente;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Ao contrário de;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Obviamente, isso era de se esperar, já que cortamos várias coisas. Mas você não especificou quais arquivos você deseja gerar. Nem todos os arquivos podem ser gerados por módulo, pois, por exemplo, as classes de interceptação podem depender de vários módulos e, portanto, forneceriam uma saída limitada de funcionalidade se você o executasse apenas para um módulo.
Você pode encontrar os geradores responsáveis aqui;
setup / src / Magento / Setup / Module / Di / App / Task / Operation /
Cada classe possui um foreach, o que permitirá que você adicione um if / else com uma continuação para pular certos módulos / caminhos. Talvez seja útil verificar a documentação dos Argumentos de entrada de componentes do Symfony Console sobre como alimentar argumentos no comando.