Magento 2 - setup: di: compile lance Aucun jeton n'a été fourni

11

Dans magento 2 lorsque j'exécute, setup:di:compilej'obtiens l'erreur suivante:

[Zend \ Code \ Exception \ RuntimeException]
Aucun jeton n'a été fourni

Comment résoudre ce problème?

J'ai désactivé tous les modules supplémentaires, j'ai exécuté setup: upgrade, mais je reçois toujours l'erreur des jetons.

À M
la source

Réponses:

23

J'ai rencontré ce problème et j'ai mis des points d'arrêt sur chaque instance de «Aucun jeton fourni» que j'ai pu trouver en utilisant:

grep -lr 'No tokens were provided' vendor/

qui a renvoyé:

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

Mon exception était levée dans le TokenArrayScanner.phpfichier. La valeur d'instance "tokens" est définie dans le constructeur, j'ai donc mis un point d'arrêt là et relancé le processus. Malheureusement, ce constructeur est appelé plusieurs fois sur de nombreux fichiers et les données du fichier en cours de jeton ne sont pas incluses dans l'appel de construction. J'ai pu déterminer que les "jetons" ne sont que des lignes du fichier en cours d'inspection. Sur la base du message de CarComp, je l'ai utilisé pour trouver le fichier incriminé:

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

Cela a révélé un certain nombre de fichiers qui vivaient sous des chemins qui contenaient "dev / tests", qui sont exclus de l'analyse, et un seul fichier provenant d'un développeur tiers. la suppression de ce fichier a résolu le problème et la commande de compilation s'est terminée avec seulement des plaintes et non des exceptions.

Andrew C. Stayart
la source
Merci, vraiment très utile. J'ai un fichier vierge dans notre module personnalisé après avoir supprimé le fichier que je peux compiler sans erreur.
Manish
10

Ici, si vous voulez savoir COMMENT trouver ces fichiers vides, exécutez simplement cette commande (en supposant que vous avez linux et l'accès au shell) dans votre répertoire racine magento, ou dans le répertoire dans lequel vous travaillez qui pourrait avoir des fichiers vides. .

find -type f -empty
CarComp
la source
5

Il semble que vous ayez un fichier vide qui est analysé par le \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , qui utilise la méthode PHP token_get_all . L'exception est levée, si la méthode ne renvoie aucune valeur, ce qui est le cas sur un fichier vide.

casdero
la source
3

Les fichiers vides provoquent également le problème Aucun jeton n'a été fourni, il devrait donc y avoir une vérification sur ClassesScanner pour évaluer si l'entrée de répertoire utilisée ou tout fichier de classe est un fichier valide et si son contenu n'est pas vide. Vous devez ajouter un contenu approprié dans les fichiers créés OU il ne doit pas être défini / créé.

Himmat Paliwal
la source
3

Vous pouvez mettre cela à l'intérieur si condition:

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

Vérifiez ensuite system.log pour voir quel fichier a généré cette erreur.

JohnyFree
la source