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.php
pliku. 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.
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 ... .
źródło
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.
źródło
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.
źródło
Możesz umieścić to w środku, jeśli warunek:
Następnie sprawdź system.log, aby zobaczyć, który plik spowodował ten błąd.
źródło