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
この情報からあなたを除外したのと同じ場所、アランで評価されます。
ベンチマーク

6
@benmarks特定のシステムの実装の詳細から除外されているため、Magento Inc.のほとんどの従業員に親しみを感じることができます;)
アランストーム

回答:


10

Magento 2は、js / htmlファイルのバンドルをサポートしました。<exclude>ノードは、バンドルすべきでないリソースのリストを定義します。詳細\Magento\Framework\View\Asset\Bundle\Managerを見る


2
同梱?どういう意味ですか?Magentoはルビーパッケージマネージャーをサポートしていますか?
アランストーム

「バンドル」とは、複数のリソースを単一のパッケージ/ファイルに結合することを意味します。サーバーへのリクエストの量を減らすことで、フロントエンドのパフォーマンスが向上します。
カンディ

除外するバンドルはどれですか?Magentoはフロントエンドアセットを「束ねる」場所が複数あるようです。
アランストーム

.jsファイルの場合、個別にロードするのではないかと推測しています。除外されていない場合、M1のJSマージオプションで使用されているように、JSファイルにマージされます。dirを除外すると、そのdir内のすべてのファイルが個別にロードされます。
ピーターヤープブラクメール16年

更新; この方法は私の疑念を裏付けています。github.com/magento/magento2/blob/...
ピーター・ヤープBlaakmeer

9

この構成は、コマンドを実行するとアクセスされます

bin/magento setup:static-content:deploy

関数\Magento\Deploy\Model\Deployer::deployFileでは、次の2つの呼び出しが重要です。

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

最初の呼び出しは、アセットファイルをファイルシステムに追加します。2番目の呼び出しが正確に何をするのかわかりません。それは私が迷っているところです。

ただし、この2番目の呼び出しに従えば、いくつかの検証関数が見つかり、最終的には

// \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.