Magento 2 - setup: di: компіляція кидків Не було вказано помилок


11

У програмі magento 2 setup:di:compileя отримую таку помилку:

[Zend \ Code \ Exception \ RuntimeException]
Не було надано лексем

Як вирішити цю проблему?

Я відключив усі додаткові модулі, запустив налаштування: оновлення, але все ж я отримую помилку лексеми.

Відповіді:


23

Я зіткнувся з цією проблемою і поставив точки перерви на кожен екземпляр "Жодних жетонів не було", які я міг знайти, використовуючи:

grep -lr 'No tokens were provided' vendor/

який повернувся:

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

Мій виняток був кинутий у TokenArrayScanner.phpфайл. Значення екземпляра "tokens" задається в конструкторі, тому я поставив там точку перерви і знову запустив процес. На жаль, цей конструктор багато разів викликається на численних файлах, а дані для файлу, що передається токенізованим, не включаються до виклику конструкції. Я зміг визначити, що "жетони" - це лише рядки файлу, який перевіряється. На основі допису CarComp я використовував це, щоб знайти файл, що порушує:

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

Це виявило декілька файлів, які проживали під шляхами, що містили "dev / тести", які виключаються із сканування, та один файл від стороннього розробника. видалення цього файлу вирішило проблему, і команда компіляції завершилася лише скаргами, а не винятками.


Дякую, дійсно дуже корисно. У мене в нашому спеціальному модулі порожній файл після видалення файлу, який я можу скласти без помилок.
Маніш

10

Тут, якщо ви хочете знати, ЯК знайти ці порожні файли, просто запустіть цю команду (припускаючи, що у вас є Linux та доступ до оболонки) у вашому кореневому каталозі magento або будь-якому іншому каталозі, у якому ви можете працювати, у якому можуть бути порожні файли. .

find -type f -empty

5

Здається, у вас порожній файл, який аналізується \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , який використовує метод PHP token_get_all . Виняток видається, якщо метод не повертає жодного значення, що є випадком у порожньому файлі.


3

Порожні файли також провокують, що жодних жетонів не було видано, тому слід встановити перевірку на ClassesScanner, щоб оцінити, чи використовується введений каталог або будь-який файл класу є дійсним файлом і чи вміст його не порожній. Потрібно додати належний вміст у створені файли АБО його не слід визначати / створювати.


3

Ви можете помістити це всередину, якщо умова:

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

Потім перевірте system.log, щоб побачити, який файл викликав цю помилку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.