Magento 2 - setup: di: compile throws ไม่มีโทเค็นที่ระบุไว้ผิดพลาด


11

ใน magento 2 เมื่อฉันเรียกใช้setup:di:compileฉันได้รับข้อผิดพลาดต่อไปนี้:

[Zend \ Code \ Exception \ RuntimeException]
ไม่มีโทเค็นให้บริการ

วิธีแก้ปัญหานี้

ฉันปิดการใช้งานโมดูลเพิ่มเติมทั้งหมดรันการติดตั้ง: อัปเกรด แต่ยังคงฉันได้รับข้อผิดพลาดโทเค็น

คำตอบ:


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ไฟล์ ค่าอินสแตนซ์ "โทเค็น" ตั้งอยู่ในตัวสร้างดังนั้นฉันจึงใส่จุดพักที่นั่นและเปิดตัวกระบวนการอีกครั้ง น่าเสียดายที่คอนสตรัคนี้เรียกว่าหลาย ๆ ครั้งในไฟล์จำนวนมากและข้อมูลสำหรับไฟล์ที่ถูก tokenized ไม่รวมอยู่ในการเรียกสร้าง ฉันสามารถระบุได้ว่า "โทเค็น" เป็นเพียงบรรทัดของไฟล์ที่ถูกตรวจสอบ จากการโพสต์โดย CarComp ฉันใช้สิ่งนี้เพื่อค้นหาไฟล์ที่ละเมิด:

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

ทำให้เกิดไฟล์จำนวนมากที่อาศัยอยู่ภายใต้พา ธ ที่มี "dev / ทดสอบ" ซึ่งไม่รวมอยู่ในการสแกนและไฟล์เดียวจากนักพัฒนาบุคคลที่สาม การลบไฟล์นี้แก้ไขปัญหาและคำสั่งการคอมไพล์เสร็จสมบูรณ์โดยมีข้อร้องเรียนเพียงอย่างเดียวและไม่ใช่ข้อยกเว้น


ขอบคุณเป็นประโยชน์จริงๆ ฉันมีไฟล์เปล่าในโมดูลที่กำหนดเองหลังจากลบไฟล์ฉันสามารถรวบรวมโดยไม่มีข้อผิดพลาด
Manish

10

ที่นี่ถ้าคุณต้องการทราบวิธีค้นหาไฟล์ว่างเปล่าเหล่านั้นให้เรียกใช้คำสั่งนี้ (สมมติว่าคุณมี linux และเข้าถึงเชลล์) ในไดเรกทอรีรากของ magento หรือไดเรกทอรีใด ๆ ที่คุณใช้งานอยู่ซึ่งอาจมีไฟล์ว่างอยู่ .. .

find -type f -empty

5

ดูเหมือนว่าคุณมีไฟล์ที่ว่างเปล่าซึ่งจะแยกกันโดย\ วีโอไอพี \ Setup \ โมดูล \ Di \ รหัส \ อ่าน \ ClassesScannerซึ่งใช้ภาษา PHP token_get_allวิธี ข้อยกเว้นจะถูกโยนถ้าวิธีการไม่ได้ส่งกลับค่าใด ๆ ซึ่งเป็นกรณีในไฟล์ที่ว่างเปล่า


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.