Magento 2-setup:di:compileがトークンを提供しないというエラーをスローする


11

magento 2で実行するsetup:di:compileと、次のエラーが発生します。

[Zend \ Code \ Exception \ RuntimeException]
トークンが提供されていません

この問題を解決するには?

追加モジュールをすべて無効にし、setup:upgradeを実行しましたが、それでもトークンエラーが発生します。

回答:


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 / tests」を含むパスの下に存在する多数のファイルがスキャンから除外され、サードパーティの開発者からの単一のファイルが見つかりました。このファイルを削除することで問題は解決し、コンパイルコマンドは例外ではなく苦情のみで完了しました。


本当にありがとうございました。エラーなしでコンパイルできるファイルを削除した後、カスタムモジュールに空のファイルがあります。
2016

10

ここで、これらの空のファイルを見つける方法を知りたい場合は、このコマンドを実行します(linuxがあり、シェルにアクセスできると仮定して)、magentoのルートディレクトリ、または空のファイルがある可能性のある作業中のディレクトリで実行します。 。

find -type f -empty

5

PHPのtoken_get_allメソッドを使用する\ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScannerによって解析される空のファイルがあるようです。メソッドが値を返さない場合、例外がスローされます。これは空のファイルの場合です。


3

空のファイルは、トークンが提供されなかったという問題も引き起こします。そのため、ClassesScannerで、使用されたディレクトリエントリまたはクラスファイルが有効なファイルであり、その内容が空でないかどうかを評価するチェックが必要です。作成したファイル内に適切なコンテンツを追加する必要があります。そうでない場合は、定義/作成しないでください。


3

if条件の中にこれを入れることができます:

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

次に、system.logをチェックして、このエラーの原因となったファイルを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.