Magento 2 - setup: di: compile throws Nenhum erro de tokens foi fornecido

11

No magento 2, quando executo setup:di:compile, recebo o seguinte erro:

[Zend \ Code \ Exception \ RuntimeException]
Nenhum token foi fornecido

Como resolver este problema?

Desativei todos os módulos adicionais, executei setup: upgrade, mas ainda assim recebo o erro de tokens.

Tom
fonte

Respostas:

23

Tive esse problema e coloquei pontos de interrupção em cada instância de 'Nenhum token foi fornecido' que eu poderia encontrar usando:

grep -lr 'No tokens were provided' vendor/

que retornou:

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

Minha exceção estava sendo lançada no TokenArrayScanner.phparquivo. O valor da instância "tokens" é definido no construtor, então coloquei um ponto de interrupção lá e reiniciei o processo. Infelizmente, esse construtor é chamado várias vezes em vários arquivos, e os dados do arquivo que está sendo tokenizado não são incluídos na chamada de construção. Consegui determinar que os "tokens" são apenas linhas do arquivo que está sendo inspecionado. Baseado no post do CarComp, usei isso para encontrar o arquivo incorreto:

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

Isso resultou em vários arquivos que residiam em caminhos que continham "dev / tests", excluídos da verificação, e um único arquivo de um desenvolvedor de terceiros. a remoção desse arquivo resolveu o problema e o comando de compilação foi concluído com apenas reclamações e não exceções.

Andrew C. Stayart
fonte
Obrigado, realmente muito útil. Eu tenho um arquivo em branco em nosso módulo personalizado depois de excluir o arquivo que posso compilar sem erros.
Manish
10

Aqui, se você quiser saber como encontrar esses arquivos vazios, basta executar este comando (supondo que você tenha linux e acesso ao shell) no diretório raiz do magento, ou em qualquer diretório em que esteja trabalhando que possa ter arquivos vazios. .

find -type f -empty
CarComp
fonte
5

Parece que você tem um arquivo vazio que é analisado pelo \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , que usa o método token_get_all do PHP . A exceção é lançada, se o método não retornar nenhum valor, como é o caso de um arquivo vazio.

casdero
fonte
3

Os arquivos vazios também provocam o problema Não foram fornecidos tokens; portanto, deve-se verificar o ClassesScanner para avaliar se a entrada de diretório usada ou qualquer arquivo de classe é um arquivo válido e se seu conteúdo não está vazio. Você precisa adicionar o conteúdo adequado aos arquivos criados OU não deve ser definido / criado.

Himmat Paliwal
fonte
3

Você pode colocar isso dentro se a condição:

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

Em seguida, verifique system.log para ver qual arquivo produziu esse erro.

JohnyFree
fonte