Answers:
我遇到了这个问题,并在可以使用的“没有提供令牌”的每个实例上设置断点:
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
文件中引发。“令牌”实例值是在构造函数中设置的,因此我在此处放置了一个断点并重新启动了该过程。不幸的是,该构造函数在多个文件上被多次调用,并且正在被标记化的文件的数据不包含在构造调用中。我能够确定“令牌”只是被检查文件的几行。根据CarComp的帖子,我用它来查找有问题的文件:
find . -type f -name '*.php' -empty
这打开了许多文件,这些文件位于包含“ dev / tests”(不包括在扫描中)的路径下,以及来自第三方开发人员的单个文件中。删除此文件解决了该问题,并且仅在抱怨而不是例外的情况下完成了compile命令。
似乎您有一个空文件,该文件由\ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner解析,该文件使用PHP token_get_all方法。如果该方法未返回任何值,则抛出异常,在空文件中就是这种情况。
空文件还会引发“未提供令牌”问题,因此应该检查ClassesScanner,以评估使用的目录条目或任何类文件是否为有效文件,以及其内容是否为空。您需要在创建的文件中添加适当的内容,否则就不应定义/创建。