Magento 2 - setup: di: compile throws Tidak ada token yang diberikan galat

11

Di magento 2 ketika saya menjalankan setup:di:compilesaya mendapatkan kesalahan berikut:

[Zend \ Code \ Exception \ RuntimeException]
Tidak ada token yang disediakan

Bagaimana cara mengatasi masalah ini?

Saya menonaktifkan semua modul tambahan, menjalankan pengaturan: memutakhirkan, tetapi saya masih mendapatkan kesalahan token.

Tom
sumber

Jawaban:

23

Saya mengalami masalah ini dan meletakkan breakpoint pada setiap contoh 'Tidak ada token yang disediakan' yang dapat saya temukan dengan menggunakan:

grep -lr 'No tokens were provided' vendor/

yang dikembalikan:

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

Pengecualian saya dilemparkan ke TokenArrayScanner.phpfile. Nilai instance "token" diatur dalam konstruktor, jadi saya meletakkan break point di sana dan meluncurkan kembali prosesnya. Sayangnya, konstruktor ini dipanggil berkali-kali pada banyak file, dan data untuk file yang di-tokenized tidak termasuk dalam panggilan konstruk. Saya dapat menentukan bahwa "token" hanyalah garis-garis file yang sedang diperiksa. Berdasarkan posting oleh CarComp, saya menggunakan ini untuk menemukan file yang menyinggung:

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

Ini menghasilkan sejumlah file yang hidup di bawah jalur yang berisi "dev / tes", yang dikecualikan dari pemindaian, dan satu file dari pengembang pihak ketiga. menghapus file ini memecahkan masalah dan perintah kompilasi diselesaikan hanya dengan keluhan dan bukan pengecualian.

Andrew C. Stayart
sumber
Terima kasih, sangat membantu. Saya memiliki file kosong di modul khusus kami setelah menghapus file yang dapat saya kompilasi tanpa kesalahan.
Manish
10

Di sini, jika Anda ingin tahu BAGAIMANA menemukan file-file kosong itu, jalankan saja perintah ini (dengan asumsi Anda memiliki linux, dan akses ke shell) di direktori root magento Anda, atau direktori apa pun yang Anda kerjakan yang mungkin memiliki file kosong. .

find -type f -empty
CarComp
sumber
5

Tampaknya Anda memiliki file kosong yang diuraikan oleh \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , yang menggunakan metode token_get_all PHP . Pengecualian dilemparkan, jika metode ini tidak mengembalikan nilai apa pun, yang merupakan kasus pada file kosong.

casdero
sumber
3

File kosong juga memprovokasi No token diberikan masalah, jadi harus ada pemeriksaan pada ClassesScanner untuk mengevaluasi apakah entri direktori yang digunakan atau file kelas apa pun adalah file yang valid dan jika isinya tidak kosong. Anda perlu menambahkan konten yang tepat dalam file yang dibuat ATAU itu tidak harus didefinisikan / dibuat.

Himmat Paliwal
sumber
3

Anda dapat memasukkan ini ke dalam jika kondisinya:

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

Kemudian periksa system.log untuk melihat file mana yang menghasilkan kesalahan ini.

JohnyFree
sumber