Tập bin/magento
tin thực thi của Magento chỉ là một thành phần của Symfony Console. Điều này có nghĩa là bạn có thể tìm thấy tệp riêng lẻ có thể sửa chữa cho một lệnh duy nhất. Việc đặt tên luôn giống nhau để thiết lập: di: compile, bạn có thể tìm thấy DiCompileCommand.php ( setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).
Nó sẽ luôn chạy exeucte()
phương thức vì vậy đó là nơi chúng ta cần tìm. Trong hàm này, bạn sẽ thấy một $operations
var được đặt, được điền bởi getOperationsConfiguration()
phương thức. Phương thức này về cơ bản nói với DiCompileCommand những gì cần biên dịch.
Điều đầu tiên tôi đã thử là chỉ trả về phần tạo mã ứng dụng, như vậy;
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,
]
];
}
Điều này diễn ra khá tốt, thời gian biên dịch đã bị cắt giảm đáng kể;
Compilation was started.
Application code generator... 1/1 [============================] 100% 45 secs 308.8 MiB
Generated code and dependency injection configuration successfully.
Như trái ngược với;
Compilation was started.
Interception cache generation... 7/7 [============================] 100% 3 mins 377.0 MiBB8 MiB
Generated code and dependency injection configuration successfully.
Tất nhiên, điều này đã được mong đợi vì chúng tôi đã cắt bỏ một số thứ. Nhưng bạn không nói rõ mà các tập tin bạn muốn đã được tạo ra. Không phải tất cả các tệp đều có thể được tạo trên cơ sở mỗi mô-đun, vì ví dụ, các lớp Đánh chặn có thể phụ thuộc vào nhiều mô-đun và do đó sẽ cung cấp cho bạn một đầu ra chức năng hạn chế nếu bạn chỉ chạy điều này cho một mô-đun.
Bạn có thể tìm thấy các máy phát điện có trách nhiệm ở đây;
thiết lập / src / Magento / Cài đặt / Mô-đun / Di / Ứng dụng / Nhiệm vụ / Hoạt động /
Mỗi lớp có một foreach trong đó, nó sẽ cho phép bạn thêm một if / khác với việc tiếp tục bỏ qua các mô-đun / đường dẫn nhất định. Có lẽ sẽ hữu ích khi kiểm tra tài liệu Đối số nhập liệu thành phần của bảng điều khiển Symfony về cách cung cấp đối số vào lệnh.