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에서 평가됩니다.
benmarks

6
@benmarks 특정 시스템의 구현 세부 사항에서 제외되면 Magento Inc.의 대부분의 직원에게 더 가깝게 느껴집니다.
Alan Storm

답변:


10

Magento 2는 js / html 파일 번들링을 지원했습니다. <exclude>노드는 번들로 묶어서는 안되는 리소스 목록을 정의합니다. 자세한 내용 \Magento\Framework\View\Asset\Bundle\Manager을 참조하십시오


2
번들링? 그게 무슨 뜻이야? 마 젠토는 루비 패키지 관리자를 지원합니까?
Alan Storm

'번들링'은 여러 리소스를 단일 패키지 / 파일로 결합하는 것을 의미합니다. 서버에 대한 요청 양을 줄임으로써 프런트 엔드 성능이 향상됩니다.
KAndy

어떤 번들링이 제외에 적용됩니까? Magento가 프론트 엔드 자산을 "뭉치"는 곳이 여러 곳있는 것 같습니다.
Alan Storm

.js 파일인지 추측하여 개별적으로로드합니다. 제외되지 않으면 M1의 JS 병합 옵션과 익숙한 것처럼 JS 파일에 병합됩니다. 디렉토리가 제외되면 해당 디렉토리의 모든 파일이 개별적으로로드됩니다.
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.