Những gì mà loại trừ Thẻ Tag trong tập tin view.xml của Magento 2 làm gì


17

Chủ đề "trống" Magento 2 bao gồm phân cấp thẻ sau.

<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>

Cái này ở đây để làm gì tức là những gì đang được loại trừ khỏi những gì? Mã hệ thống Magento 2 truy cập thông tin này ở đâu và khi nào?


5
Nó được đánh giá ở cùng một nơi nơi chúng tôi loại bạn khỏi thông tin này, Alan.
đánh dấu

6
@benmark Bị loại trừ khỏi các chi tiết triển khai của một hệ thống cụ thể khiến tôi cảm thấy gần gũi hơn với hầu hết nhân viên của Magento Inc .;)
Alan Storm

Câu trả lời:


10

Magento 2 hỗ trợ gói các tệp js / html. <exclude>nút xác định danh sách các tài nguyên không nên được gói. xem \Magento\Framework\View\Asset\Bundle\Managerđể biết chi tiết


2
Gói hàng? Điều đó nghĩa là gì? Magento hỗ trợ một người quản lý gói ruby?
Alan Storm

'Gói' có nghĩa là kết hợp nhiều tài nguyên vào một gói / tệp. Đó là cải tiến hiệu suất frontend bằng cách giảm số lượng yêu cầu đến máy chủ.
KAndy

Gói nào không loại trừ áp dụng cho? Dường như có nhiều nơi Magento "bó lại" tài sản lối vào.
Alan Storm

Tôi đoán nếu đó là tệp .js, nó sẽ tải riêng lẻ. Nếu không bị loại trừ, nó sẽ được hợp nhất trong một tệp JS giống như chúng ta đã sử dụng với tùy chọn Hợp nhất JS trong M1. Nếu một thư mục bị loại trừ, tất cả các tệp trong thư mục đó sẽ được tải riêng lẻ.
Peter Jaap Blaakmeer

Cập nhật; phương pháp này xác nhận sự nghi ngờ của tôi; github.com/magento/magento2/blob/
Ấn

9

Cấu hình này được truy cập khi bạn thực hiện lệnh

bin/magento setup:static-content:deploy

Trong chức năng \Magento\Deploy\Model\Deployer::deployFile, hai cuộc gọi sau đây là mối quan tâm:

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

Cuộc gọi đầu tiên sẽ thêm tệp tài sản vào hệ thống tệp. Tôi không chắc cuộc gọi thứ hai chính xác là gì. Đó là nơi tôi đang bị lạc.

Tuy nhiên, nếu bạn thực hiện theo cuộc gọi thứ hai này, bạn sẽ tìm thấy một số chức năng xác thực, cuối cùng dẫn đến

// \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'] : [];
}

Nhưng, có một vài vấn đề ở đây.

Đầu tiên, hàm \Magento\Framework\Config\View::getItemsdường như luôn trả về một mảng trống.

Thứ hai, chức năng \Magento\Framework\View\Asset\Bundle\Manager::isExcludedFilesẽ luôn trở lạifalse

/**
 * 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;
}

Bởi vì $asset->getSourceFile()là đường dẫn tuyệt đối đến tệp nội dung, trong khi $filePathInfo['excludedPath']là đường dẫn tương đối.

Vì vậy, theo như tôi có thể thấy <exclude>cấu hình sẽ không hoạt động. Nhưng nếu nó hoạt động, tài sản sẽ bị loại khỏi \Magento\Framework\View\Asset\Bundle.

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.