Виконаний bin/magento
файл Magento - це лише компонент консолі Symfony. Це означає, що ви можете знайти окремий файл, відповідальний за одну команду. Ім'я завжди однакове, тому для настройки: di: compile ви можете знайти DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
Він завжди буде запускати exeucte()
метод, тому саме там нам потрібно шукати. У цій функції ви побачите встановлений $operations
var, який заповнюється getOperationsConfiguration()
методом. Цей метод в основному повідомляє DiCompileCommand, що потрібно компілювати.
Перше, що я спробував - це повернути саме частину генератора коду програми, як-от так;
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,
]
];
}
Це пройшло досить добре, час складання різко скоротився;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
На відміну від;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Звичайно, цього можна було очікувати, оскільки ми вирізали ряд речей. Але ви не вказали, які файли потрібно створити. Не всі файли можна генерувати на основі модулів, оскільки, наприклад, класи перехоплення можуть залежати від декількох модулів і тому дають вам обмежений вихід функціональних можливостей, якщо ви запускаєте це лише для одного модуля.
Ви можете знайти відповідальних генераторів тут;
setup / src / Magento / Setup / Module / Di / App / Task / Operation /
У кожному класі є передбачення, що дозволить вам додати if / else з продовженням пропускання певних модулів / контурів. Можливо, було б корисно ознайомитись із документацією на вхідні аргументи компонента консолі Symfony про те, як подавати аргументи в команду.