L' bin/magento
exécutable de Magento est juste un composant de la console Symfony. Cela signifie que vous pouvez trouver le fichier individuel responsable d’une seule commande. Le nom est toujours le même, donc pour setup: di: compile vous pouvez trouver DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
La exeucte()
méthode sera toujours exécutée , c'est pourquoi nous devons l'examiner. Dans cette fonction, vous verrez qu'une $operations
variable est définie, qui est remplie par la getOperationsConfiguration()
méthode. Cette méthode indique à la DiCompileCommand quoi compiler.
La première chose que j'ai essayée est de ne renvoyer que la partie générateur de code d'application, comme ceci;
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,
]
];
}
Cela s’est bien passé, le temps de compilation a été considérablement réduit;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Par opposition à;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Bien entendu, il fallait s'y attendre, car nous avons éliminé un certain nombre de choses. Mais vous ne l' avez pas spécifié que les fichiers que vous voulez avoir généré. Tous les fichiers ne peuvent pas être générés module par module car, par exemple, les classes d'interception peuvent dépendre de plusieurs modules et vous donneraient donc une sortie limitée de fonctionnalités si vous ne l'exécutiez que pour un module.
Vous pouvez trouver les générateurs responsables ici;
setup / src / Magento / Setup / Module / Di / App / Task / Operation /
Chaque classe a une foreach, ce qui vous permettra d’ajouter un if / else avec un continuer à ignorer certains modules / chemins. Peut-être serait-il utile de consulter la documentation relative aux arguments d' entrée des composants de la console Symfony pour savoir comment introduire des arguments dans la commande.