แท็ก“ แยก” ในไฟล์ view.xml ของ Magento 2 ทำอะไรได้บ้าง


17

ชุดรูปแบบ Magento 2 "blank" มีลำดับชั้นของแท็กดังต่อไปนี้

<exclude>
    <item type="file">Lib::jquery/jquery-ui-1.9.2.js</item>
    <item type="file">Lib::jquery/jquery.ba-hashchange.min.js</item>
    <item type="file">Lib::jquery/jquery.details.js</item>
    <item type="file">Lib::jquery/jquery.details.min.js</item>
    <item type="file">Lib::jquery/jquery.hoverIntent.js</item>
    <item type="file">Lib::jquery/jquery.min.js</item>
    <item type="file">Lib::mage/captcha.js</item>
    <item type="file">Lib::mage/dropdown_old.js</item>
    <item type="file">Lib::mage/list.js</item>
    <item type="file">Lib::mage/loader_old.js</item>
    <item type="file">Lib::mage/webapi.js</item>
    <item type="file">Lib::moment.js</item>
    <item type="file">Lib::requirejs/require.js</item>
    <item type="file">Lib::date-format-normalizer.js</item>
    <item type="file">Lib::legacy-build.min.js</item>
    <item type="directory">Lib::modernizr</item>
    <item type="directory">Lib::tiny_mce</item>
    <item type="directory">Lib::varien</item>
    <item type="directory">Lib::jquery/editableMultiselect</item>
    <item type="directory">Lib::jquery/jstree</item>
    <item type="directory">Lib::jquery/fileUploader</item>
    <item type="directory">Lib::css</item>
    <item type="directory">Lib::lib</item>
    <item type="directory">Lib::extjs</item>
    <item type="directory">Lib::prototype</item>
    <item type="directory">Lib::scriptaculous</item>
    <item type="directory">Lib::mage/requirejs</item>
    <item type="directory">Lib::mage/adminhtml</item>
    <item type="directory">Lib::mage/backend</item>
    <item type="directory">Magento_Swagger::swagger-ui</item>
</exclude>

นี่คืออะไรสำหรับ เช่นสิ่งที่ถูกแยกออกจากอะไร รหัสระบบ Magento 2 เข้าถึงข้อมูลนี้ได้ที่ไหนและเมื่อไหร่?


5
มีการประเมินในที่เดียวกับที่เรายกเว้นคุณจากข้อมูลนี้อลัน
benmarks

6
@ เครื่องหมายถูกถูกแยกออกจากรายละเอียดการใช้งานของระบบเฉพาะทำให้ฉันรู้สึกใกล้ชิดกับพนักงานส่วนใหญ่ของ Magento Inc. ;)
Alan Storm

คำตอบ:


10

Magento 2 รองรับการรวมไฟล์ js / html <exclude>โหนดกำหนดรายการของทรัพยากรที่ไม่ควรรวม ดู\Magento\Framework\View\Asset\Bundle\Managerรายละเอียด


2
Bundling? นั่นหมายความว่าอย่างไร? Magento สนับสนุนผู้จัดการแพคเกจทับทิมหรือไม่?
Alan Storm

'Bundling' หมายถึงการรวมทรัพยากรหลาย ๆ อย่างไว้ในแพ็คเกจ / ไฟล์เดียว เป็นการปรับปรุงประสิทธิภาพส่วนหน้าโดยลดปริมาณการร้องขอไปยังเซิร์ฟเวอร์
KAndy

การรวมกลุ่มใดที่ไม่รวมถึง ดูเหมือนจะมีหลาย ๆ สถานที่ที่วีโอไอพี "รวมกลุ่ม" สินทรัพย์ส่วนหน้า
Alan Storm

ฉันเดาว่ามันเป็นไฟล์. js หรือเปล่ามันจะโหลดทีละไฟล์ หากไม่ได้แยกออกไปไฟล์นั้นจะถูกรวมในไฟล์ JS เหมือนที่เราคุ้นเคยกับตัวเลือก JS Merge ใน M1 หากไม่รวม dir ไฟล์ทั้งหมดใน dir นั้นจะถูกโหลดแยกกัน
Peter Jaap Blaakmeer

อัปเดต; วิธีนี้ยืนยันความสงสัยของฉัน github.com/magento/magento2/blob/…
Peter Jaap Blaakmeer

9

การกำหนดค่านี้ถูกเข้าถึงเมื่อคุณดำเนินการคำสั่ง

bin/magento setup:static-content:deploy

ในฟังก์ชั่น\Magento\Deploy\Model\Deployer::deployFileการโทรสองสายต่อไปนี้เป็นที่สนใจ:

$this->assetPublisher->publish($asset);
$this->bundleManager->addAsset($asset);

การเรียกครั้งแรกจะเพิ่มไฟล์เนื้อหาลงในระบบไฟล์ ฉันไม่แน่ใจว่าการโทรครั้งที่สองทำอะไรกันแน่ นั่นคือสิ่งที่ฉันหลงทาง

อย่างไรก็ตามหากคุณติดตามการโทรครั้งที่สองนี้คุณจะพบฟังก์ชั่นการตรวจสอบความถูกต้องบางอย่างซึ่งในที่สุดจะนำไปสู่

// \Magento\Framework\Config\View

/**
 * Get excluded file list
 *
 * @return array
 */
public function getExcludedFiles()
{
    $items = $this->getItems();
    return isset($items['file']) ? $items['file'] : [];
}

/**
 * Get excluded directory list
 *
 * @return array
 */
public function getExcludedDir()
{
    $items = $this->getItems();
    return isset($items['directory']) ? $items['directory'] : [];
}

/**
 * Get a list of excludes
 *
 * @return array
 */
protected function getItems()
{
    $this->initData();
    return isset($this->data['exclude']) ? $this->data['exclude'] : [];
}

แต่มีปัญหาเล็กน้อยที่นี่

ครั้งแรกฟังก์ชั่น\Magento\Framework\Config\View::getItemsดูเหมือนจะกลับอาร์เรย์ที่ว่างเปล่าเสมอ

ประการที่สองฟังก์ชั่น\Magento\Framework\View\Asset\Bundle\Manager::isExcludedFileจะกลับมาเสมอfalse

/**
 * Check if asset file is excluded
 *
 * @param string $filePath
 * @param LocalInterface $asset
 * @return bool
 */
protected function isExcludedFile($filePath, $asset)
{
    /** @var $asset LocalInterface */
    $filePathInfo = $this->splitPath($filePath);
    if ($filePathInfo && $this->compareModules($filePathInfo, $asset)) {
        return $asset->getSourceFile() == $filePathInfo['excludedPath'];
    }
    return false;
}

เพราะ$asset->getSourceFile()เป็นเส้นทางที่แน่นอนไปยังไฟล์สินทรัพย์ในขณะที่$filePathInfo['excludedPath']เป็นเส้นทางที่เกี่ยวข้อง

ดังนั้นเท่าที่ฉันเห็นการ<exclude>กำหนดค่าจะไม่ทำงานอยู่ดี \Magento\Framework\View\Asset\Bundleแต่ถ้ามันจะทำงานสินทรัพย์ที่จะได้รับการยกเว้นจาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.