Що робить тег "виключення" у файлі view.xml Magento 2


17

"Пуста" тема Magento 2 включає таку ієрархію тегів.

<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
Оцінюється там, де ми виключили вас з цієї інформації, Алан.
орієнтири

6
@benmarks Якщо бути виключеним із деталей щодо впровадження певної системи, я відчуваю себе ближчим до більшості співробітників Magento Inc.;)
Алан Шторм

Відповіді:


10

Magento 2 підтримує групування файлів js / html. <exclude>вузол визначає список ресурсів, які не слід комплектувати. див. \Magento\Framework\View\Asset\Bundle\Managerподробиці


2
Пачка? Що це означає? Magento підтримує менеджер пакетів рубіну?
Алан Шторм

"Об'єднання" означає об'єднання декількох ресурсів в один пакет / файл. Це підвищення продуктивності за рахунок зменшення кількості запитів на сервер.
Кенді

До якого пакету не застосовується? Мабуть, існує багато місць, які Magento "згуртовує" активи фронту.
Алан Шторм

Я здогадуюсь, що це .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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.