L' bin/magento
eseguibile di Magento è solo un componente di Symfony Console. Ciò significa che è possibile trovare il singolo file responsabile di un singolo comando. La denominazione è sempre la stessa, quindi per setup: di: compile puoi trovare DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
Eseguirà sempre il exeucte()
metodo, quindi è lì che dobbiamo guardare. In questa funzione, vedrai che $operations
è impostata una var, che viene riempita dal getOperationsConfiguration()
metodo. Questo metodo sostanzialmente dice a DiCompileCommand cosa compilare.
La prima cosa che ho provato è restituire solo la parte del generatore del codice dell'applicazione, in questo modo;
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,
]
];
}
È andato abbastanza bene, il tempo di compilazione è stato ridotto drasticamente;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Al contrario di;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Certo, questo era prevedibile dal momento che abbiamo tagliato un certo numero di cose. Ma non hai specificato quali file vuoi aver generato. Non tutti i file possono essere generati su una base per modulo, dal momento che, ad esempio, le classi di intercettazione possono dipendere da più moduli e quindi fornirebbero un output limitato di funzionalità se lo si eseguisse solo per un modulo.
Puoi trovare i generatori responsabili qui;
setup / src / Magento / Setup / modulo / Di / App / Task / Operazione /
Ogni classe ha un foreach in esso, che ti permetterà di aggiungere un if / else con un continuo saltare determinati moduli / percorsi. Forse sarebbe utile controllare la documentazione di Symfony Console Component Input Arguments su come inserire argomenti nel comando.