bin/magento
Исполняемый файл Magento - это просто компонент Symfony Console. Это означает, что вы можете найти отдельный файл, отвечающий за одну команду. Наименование всегда одинаковое, поэтому для настройки: di: compile вы можете найти DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
Он всегда будет запускать exeucte()
метод, так что нам нужно посмотреть. В этой функции вы увидите, что $operations
переменная установлена, которая заполняется 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.
Конечно, этого следовало ожидать, так как мы вырезали несколько вещей. Но вы не указали, какие файлы вы хотите сгенерировать. Не все файлы могут быть сгенерированы для каждого модуля, так как, например, классы перехвата могут зависеть от нескольких модулей и, следовательно, могут дать вам ограниченный вывод функциональности, если вы запустите это только для одного модуля.
Вы можете найти ответственных генераторов здесь;
Настройка / SRC / Magento / Setup / модуль / Di / App / Task / Работа /
В каждом классе есть foreach, который позволит вам добавить if / else с оператором continue, пропускающим определенные модули / пути. Возможно, было бы полезно ознакомиться с документацией Symfony Console Component Input Arguments о том, как вводить аргументы в команду.