Magento 2 - setup: di: biên dịch ném Không có mã thông báo được cung cấp lỗi


11

Trong magento 2 khi tôi chạy, setup:di:compiletôi gặp lỗi sau:

[Zend \ Code \ Exception \ RuntimeException]
Không có mã thông báo nào được cung cấp

Làm thế nào để giải quyết vấn đề này?

Tôi đã tắt tất cả các mô-đun bổ sung, chạy thiết lập: nâng cấp, nhưng tôi vẫn gặp lỗi mã thông báo.

Câu trả lời:


23

Tôi đã gặp sự cố này và đặt các điểm dừng trên mỗi phiên bản 'Không cung cấp mã thông báo' Tôi có thể tìm thấy bằng cách sử dụng:

grep -lr 'No tokens were provided' vendor/

đã trả lại:

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

Ngoại lệ của tôi đã bị ném vào TokenArrayScanner.phptập tin. Giá trị cá thể "mã thông báo" được đặt trong hàm tạo, vì vậy tôi đặt điểm dừng ở đó và khởi chạy lại quy trình. Thật không may, hàm tạo này được gọi nhiều lần trên nhiều tệp và dữ liệu cho tệp được mã hóa không được bao gồm trong lệnh gọi cấu trúc. Tôi đã có thể xác định rằng "mã thông báo" chỉ là các dòng của tệp đang được kiểm tra. Dựa trên bài đăng của CarComp, tôi đã sử dụng tệp này để tìm tệp vi phạm:

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

Điều này đã tạo ra một số tệp sống trong các đường dẫn có chứa "dev / tests", loại trừ khỏi quá trình quét và một tệp từ nhà phát triển bên thứ ba. loại bỏ tệp này đã giải quyết vấn đề và lệnh biên dịch hoàn thành chỉ với các khiếu nại và không có ngoại lệ.


Cảm ơn, thực sự rất hữu ích. Tôi có một tệp trống trong mô-đun tùy chỉnh của chúng tôi sau khi xóa tệp tôi có thể biên dịch mà không có lỗi.
Manish

10

Ở đây, nếu bạn muốn biết CÁCH tìm các tệp trống đó, chỉ cần chạy lệnh này (giả sử bạn có linux và truy cập vào shell) trong thư mục gốc magento của bạn hoặc bất kỳ thư mục nào bạn đang làm việc có thể có các tệp trống .. .

find -type f -empty

5

Có vẻ như bạn có một tệp trống được phân tích cú pháp bởi \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , sử dụng phương thức PHP token_get_all . Ngoại lệ được đưa ra, nếu phương thức không trả về bất kỳ giá trị nào, đó là trường hợp trên một tệp trống.


3

Các tệp trống cũng gây ra vấn đề Không được cung cấp mã thông báo, do đó cần có một kiểm tra trên ClassesScanner để đánh giá xem mục nhập thư mục đã sử dụng hay bất kỳ tệp lớp nào là tệp hợp lệ và nếu nội dung của nó không trống. Bạn cần thêm nội dung phù hợp trong các tệp đã tạo HOẶC không nên xác định / tạo.


3

Bạn có thể đặt cái này bên trong nếu có điều kiện:

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

Sau đó kiểm tra system.log để xem tập tin nào tạo ra lỗi này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.