bin/magento
Eksekusi Magento hanyalah komponen Symfony Console. Ini berarti Anda dapat menemukan file individu bertanggung jawab untuk satu perintah. Penamaannya selalu sama sehingga untuk setup: di: compile Anda dapat menemukan DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
Itu akan selalu menjalankan exeucte()
metode sehingga di situlah kita perlu melihat. Dalam fungsi ini, Anda akan melihat $operations
var diatur, yang diisi oleh getOperationsConfiguration()
metode ini. Metode ini pada dasarnya memberi tahu DiCompileCommand apa yang harus dikompilasi.
Hal pertama yang saya coba adalah mengembalikan hanya bagian generator kode aplikasi, seperti itu;
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,
]
];
}
Ini berjalan cukup baik, waktu kompilasi berkurang secara dramatis;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Sebagai lawan;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Tentu saja, ini sudah diduga karena kami memotong beberapa hal. Tetapi Anda tidak menentukan file mana yang ingin Anda buat. Tidak semua file dapat dihasilkan berdasarkan per-modul, karena misalnya, kelas Interception dapat bergantung pada beberapa modul dan karenanya akan memberi Anda output fungsionalitas yang terbatas jika Anda hanya menjalankan ini untuk satu modul.
Anda dapat menemukan generator yang bertanggung jawab di sini;
setup / src / Magento / Setup / Modul / Di / App / Tugas / Operasi /
Setiap kelas memiliki foreach di dalamnya, yang akan memungkinkan Anda untuk menambahkan if / else dengan terus melewati modul / jalur tertentu. Mungkin akan berguna untuk memeriksa dokumentasi Argumen Input Komponen Symfony Konsol tentang cara memasukkan argumen ke dalam perintah.