Magento 2 - setup: di: compile throws Nie podano tokenów błąd


11

W Magento 2 po uruchomieniu pojawia setup:di:compilesię następujący błąd:

[Zend \ Code \ Exception \ RuntimeException]
Nie podano tokenów

Jak rozwiązać ten problem?

Wyłączyłem wszystkie dodatkowe moduły, uruchomiłem setup: upgrade, ale nadal pojawia się błąd tokena.

Odpowiedzi:


23

Wystąpił ten problem i umieściłem punkty przerwania dla każdej instancji „Nie podano tokenów”, które można znaleźć za pomocą:

grep -lr 'No tokens were provided' vendor/

który zwrócił:

vendor/zendframework/zend-code/src/Scanner/ConstantScanner.php
vendor/zendframework/zend-code/src/Scanner/TokenArrayScanner.php
vendor/zendframework/zend-code/src/Scanner/MethodScanner.php
vendor/zendframework/zend-code/src/Scanner/PropertyScanner.php
vendor/zendframework/zend-code/src/Scanner/ClassScanner.php

Mój wyjątek został wrzucony do TokenArrayScanner.phppliku. Wartość instancji „tokenów” jest ustawiana w konstruktorze, więc umieściłem tam punkt przerwania i ponownie uruchomiłem proces. Niestety ten konstruktor jest wywoływany wiele razy w wielu plikach, a dane dla pliku, który ma być tokenizowany, nie są uwzględniane w wywołaniu konstrukcyjnym. Udało mi się ustalić, że „tokeny” to po prostu wiersze sprawdzanego pliku. Na podstawie postu CarComp wykorzystałem to do znalezienia pliku obrażającego:

find . -type f -name '*.php' -empty

W ten sposób pojawiło się wiele plików, które żyły pod ścieżkami zawierającymi „dev / testy”, które są wykluczone ze skanowania, oraz jeden plik od zewnętrznego programisty. usunięcie tego pliku rozwiązało problem, a polecenie kompilacji zakończyło się tylko reklamacjami, a nie wyjątkami.


Dzięki, naprawdę bardzo pomocny. Mam pusty plik w naszym module niestandardowym po usunięciu pliku jestem w stanie skompilować bez błędów.
Manish

10

Tutaj, jeśli chcesz wiedzieć, jak znaleźć te puste pliki, po prostu uruchom to polecenie (zakładając, że masz Linux i dostęp do powłoki) w swoim katalogu głównym Magento lub w innym katalogu, w którym pracujesz, który może mieć puste pliki ... .

find -type f -empty

5

Wygląda na to, że masz pusty plik, który jest analizowany przez \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , który używa metody PHP token_get_all . Zgłaszany jest wyjątek, jeśli metoda nie zwraca żadnej wartości, jak ma to miejsce w przypadku pustego pliku.


3

Puste pliki wywołują również problem z brakiem dostarczonych tokenów, dlatego ClassesScanner powinien sprawdzić, czy używany wpis katalogu lub dowolny plik klasy jest prawidłowym plikiem i czy jego zawartość nie jest pusta. Musisz dodać odpowiednią treść do utworzonych plików LUB nie powinna być definiowana / tworzona.


3

Możesz umieścić to w środku, jeśli warunek:

    if (!$this->tokens) {
        \Zend_Debug::dump(get_object_vars($this); exit;
        throw new \Zend\Code\Exception\RuntimeException('No tokens were provided');
    }

Następnie sprawdź system.log, aby zobaczyć, który plik spowodował ten błąd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.