Magento 2的view.xml文件中的“ exclude”标记有什么作用


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
在我们从您排除此信息的地方Alan对它进行了评估。
马克

6
@benmarks被排除在特定系统的实现细节之外,使我感到更接近Magento Inc.的大多数员工;)
Alan Storm

Answers:


10

Magento 2支持js / html文件捆绑。<exclude>节点定义不应捆绑的资源列表。查看\Magento\Framework\View\Asset\Bundle\Manager详情


2
捆绑?这意味着什么?Magento支持Ruby包管理器吗?
艾伦·斯托姆

“捆绑”是指将多个资源合并到一个包/文件中。通过减少对服务器的请求数量来提高前端性能。
卡迪(KAndy)'16

不包括哪些捆绑?Magento似乎有多个地方“捆绑”前端资产。
艾伦·斯托姆

我猜如果它是.js文件,它将单独加载。如果不排除它,它将被合并到一个JS文件中,就像我们习惯使用M1中的JS Merge选项一样。如果排除了某个目录,则该目录中的所有文件都会单独加载。
Peter Jaap Blaakmeer '16

更新;这种方法证实了我的怀疑;github.com/magento/magento2/blob/...
彼得·夏侯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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.