마 젠토 2-setup : di : compile throws 토큰이 제공되지 않았습니다 오류


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파일 에서 내 예외가 발생했습니다 . "토큰"인스턴스 값이 생성자에 설정되어 있으므로 중단 점을두고 프로세스를 다시 시작했습니다. 불행히도이 생성자는 수많은 파일에서 여러 번 호출되며 토큰 화되는 파일의 데이터는 구문 호출에 포함되지 않습니다. "토큰"은 검사중인 파일의 행에 불과하다는 것을 알 수있었습니다. CarComp의 게시물을 기반으로이 파일을 사용하여 문제가되는 파일을 찾았습니다.

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

이것은 검색에서 제외 된 "dev / tests"가 포함 된 경로에 존재하는 여러 파일과 타사 개발자의 단일 파일을 나타 냈습니다. 이 파일을 제거하면 문제가 해결되었으며 컴파일 명령은 예외가 아닌 불만 사항만으로 완료되었습니다.


정말 고마워요 오류없이 컴파일 할 수있는 파일을 삭제 한 후 사용자 정의 모듈에 빈 파일이 있습니다.
Manish

10

여기서 빈 파일을 찾는 방법을 알고 싶다면 magento 루트 디렉토리 또는 빈 파일이있을 수있는 디렉토리 에서이 명령을 실행하십시오 (리눅스가 있고 쉘에 액세스한다고 가정). .

find -type f -empty

5

PHP token_get_all 메소드 를 사용하는 \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner에 의해 구문 분석 된 빈 파일이있는 것 같습니다 . 메소드가 값을 리턴하지 않으면 (예 : 빈 파일의 경우) 예외가 발생합니다.


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를 확인하여이 파일을 생성 한 파일을 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.