Czy można wstępnie wygenerować kod dla jednego określonego modułu? IE - mogę wygenerować cały kod w systemie za pomocą
php bin/magento setup:di:compile
Może to jednak zająć dużo czasu. Chciałbym wstępnie wygenerować tylko pliki dla określonego modułu.
php bin/magento setup:di:compile Pulsestorm_Commercebug
Konkretnym problemem, który próbuję rozwiązać, jest obejście tego problemu, ponieważ niektóre wtyczki nie są rozpoznawane w trybie programisty / domyślnym.
Odpowiedzi:
Krótka odpowiedź: Nie. Nie jest to obecnie możliwe w przypadku narzędzi dostarczanych z Magento.
Objaśnienie: Musimy rozróżnić generowanie i kompilację kodu . Kompilator robi obie rzeczy. Dla obu operacji musimy odczytać konfigurację wszystkich innych modułów Magento, w przeciwnym razie ich dane wyjściowe będą niepoprawne lub niepełne.
Kompilacja dla jednego modułu nie ma sensu, ponieważ magento nie będzie działać ze skompilowaną konfiguracją tylko dla jednego modułu.
Generowanie dla jednego modułu może mieć sens, ale i tak będziemy musieli odczytać podpisy konfiguracji i konstruktora ze wszystkich innych zainstalowanych modułów. Bez tego nie można wygenerować całego kodu. Tak więc taka operacja nie byłaby dużo szybsza niż pełna kompilacja. Możemy o tym myśleć, ale myślę, że wskazany błąd zostanie naprawiony przed wykonaniem polecenia.
źródło
Plik
bin/magento
wykonywalny Magento to tylko komponent konsoli Symfony. Oznacza to, że możesz znaleźć pojedynczy plik odpowiedzialny za jedno polecenie. Nazewnictwo jest zawsze takie samo, więc dla setup: di: compile można znaleźć DiCompileCommand.php (setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
).Zawsze będzie uruchamiał
exeucte()
metodę, więc tam musimy szukać. W tej funkcji zobaczysz ustawiony$operations
var, który jest wypełniany przezgetOperationsConfiguration()
metodę. Ta metoda w zasadzie mówi DiCompileCommand, co należy skompilować.Pierwszą rzeczą, którą próbowałem, jest zwrócenie tylko części generatora kodu aplikacji;
Poszło całkiem nieźle, czas kompilacji został znacznie skrócony;
W przeciwieństwie do;
Oczywiście należało się tego spodziewać, ponieważ wycięliśmy wiele rzeczy. Ale nie określiłeś, które pliki chcesz wygenerować. Nie wszystkie pliki mogą być generowane dla poszczególnych modułów, ponieważ na przykład klasy przechwytywania mogą być zależne od wielu modułów i dlatego zapewniłyby ograniczone możliwości działania, gdybyś uruchomił to tylko dla jednego modułu.
Tutaj znajdziesz odpowiedzialne generatory;
Każda klasa ma foreach, który pozwoli ci dodać if / else z pominięciem niektórych modułów / ścieżek. Może warto sprawdzić dokumentację argumentów wejściowych komponentów konsoli Symfony dotyczącą sposobu wprowadzania argumentów do polecenia.
źródło
możesz rozpoznać po
pakiet> moduł> rejestracja.php
i niż biegać
Registration.php rozpozna moduł i skompiluje moduł niestandardowy.
Mam nadzieję, że to Ci pomoże.
źródło
Zmiana konstruktora dla klasy wygenerowanej w poprzednim żądaniu spowoduje uszkodzenie. Jeśli jesteś w takich potrzebach, po prostu usuń
var/cache
,var/generation
ivar/di
(jeśli istnieje) i odśwież stronę. Upewnij się, że tryb jest programistą, w którym pracujesz.(Nie mówię w ten sposób, że magento nie będzie kompilować ani generować bazy kodu, tak, zrobi to. W ten sposób daje pewną ulgę przy uruchamianiu „setup: di: compile” za każdym razem, gdy wprowadzasz zmiany w swoich trasach lub klasach)
źródło