Magento bin/magento
ausführbare Datei ist nur eine Symfony Console-Komponente. Dies bedeutet, dass Sie die einzelne Datei für einen einzelnen Befehl als verantwortlich ansehen können. Die Benennung ist immer gleich, so dass Sie für setup: di: compile die Datei DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
) finden können.
Die exeucte()
Methode wird immer ausgeführt , daher müssen wir genau danach suchen. In dieser Funktion sehen Sie ein$operations
Variable gesetzt, die von der getOperationsConfiguration()
Methode gefüllt wird . Diese Methode teilt dem DiCompileCommand grundsätzlich mit, was kompiliert werden soll.
Das erste, was ich versucht habe, ist, nur den Teil des Anwendungscode-Generators wie folgt zurückzugeben.
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,
]
];
}
Das lief ziemlich gut, die Kompilierungszeit wurde drastisch verkürzt;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Im Gegensatz zu;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Dies war natürlich zu erwarten, da wir eine Reihe von Dingen herausgeschnitten haben. Aber Sie haben nicht angegeben welche Dateien Sie generieren möchten. Nicht alle Dateien können auf Modulbasis generiert werden, da die Interception-Klassen beispielsweise von mehreren Modulen abhängig sein können und daher nur eine eingeschränkte Funktionsausgabe bieten, wenn Sie dies nur für ein Modul ausführen würden.
Die verantwortlichen Generatoren finden Sie hier;
setup / src / Magento / Setup / Modul / Di / App / Task / Betrieb /
In jeder Klasse gibt es ein foreach, mit dem Sie ein if / else hinzufügen können, mit dem Sie bestimmte Module / Pfade überspringen können. Vielleicht ist es hilfreich, die Dokumentation zu den Symfony Console-Komponenten-Eingabeargumenten zu lesen, um zu erfahren, wie Argumente in den Befehl eingegeben werden.