Magentoのbin/magento
実行可能ファイルは、Symfonyコンソールコンポーネントです。これは、個々のファイルが単一のコマンドに責任があることを見つけることができることを意味します。命名は常に同じであるため、setup: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.
もちろん、これは多くのことを削減したので予想されていました。しかし、あなたは指定されていませんでしたあなたが生成したいファイル。すべてのファイルをモジュールごとに生成できるわけではありません。たとえば、インターセプションクラスは複数のモジュールに依存する可能性があるため、1つのモジュールに対してのみ実行すると機能の出力が制限されます。
責任あるジェネレーターはここで見つけることができます。
setup / src / Magento / Setup / Module / Di / App / Task / Operation /
各クラスにはforeachがあり、特定のモジュール/パスをスキップし続けるif / elseを追加できます。コマンドに引数を渡す方法については、Symfony Console Component Input Argumentsのドキュメントをチェックすると便利かもしれません。