Magento 2'nin view.xml dosyasındaki "hariç tut" Etiketi ne işe yarar?


17

Magento 2 "blank" teması aşağıdaki etiket hiyerarşisini içerir.

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

Bu ne için burada. yani neyin dışında tutulan nedir? Magento 2 sistem kodu bu bilgilere nerede ve ne zaman erişiyor?


5
Sizi bu bilgilerden hariç tuttuğumuz yerde değerlendiriliyor Alan.
— benmarks

6
@benmarks Belirli bir sistemin uygulama detaylarından hariç tutulmak beni Magento Inc. çalışanlarının çoğuna daha yakın hissettiriyor;)
— Alan Storm

Yanıtlar:


10

Magento 2, js / html dosyalarının paketlenmesini destekledi. <exclude>düğüm, paketlenmemesi gereken kaynakların listesini tanımlar. bkz \Magento\Framework\View\Asset\Bundle\ManagerAyrıntılar için


2
Donatılacak? Bu ne anlama geliyor? Magento ruby ​​paket yöneticisini destekliyor mu?
— Alan Storm

'Paketleme', birden fazla kaynağın tek bir pakette / dosyada birleştirilmesi anlamına gelir. Sunucuya istek miktarını azaltarak ön uç performans iyileştirmedir.
— KAndy

Hariç tutulan paketler hangileri için geçerlidir? Magento'nun ön uç varlıklarını "bir araya getirdiği" birden fazla yer var gibi görünüyor.
— Alan Storm

Bir .js dosyası olup olmadığını, bunu ayrı ayrı yükleyeceğini tahmin ediyorum. Dışlanmazsa, M1'deki JS Birleştirme seçeneğine alışık olduğumuz gibi bir JS dosyasında birleştirilir. Bir dizin hariç tutulursa, o dizindeki tüm dosyalar ayrı ayrı yüklenir.
— Peter Jaap Blaakmeer

Güncelleme; bu yöntem şüphemi doğrular; github.com/magento/magento2/blob/…
— Peter Jaap Blaakmeer

9

Komutu yürüttüğünüzde bu yapılandırmaya erişilir

bin/magento setup:static-content:deploy

İşlevde, \Magento\Deploy\Model\Deployer::deployFileaşağıdaki iki çağrı ilgi çekicidir:

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

İlk çağrı varlık dosyasını dosya sistemine ekler. İkinci aramanın tam olarak ne yaptığından emin değilim. Burası kayboluyorum.

Bununla birlikte, bu ikinci çağrıyı takip ederseniz, sonuçta bazı doğrulama işlevlerini bulacaksınız.

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

Ancak, burada birkaç sorun var.

İlk olarak, fonksiyon \Magento\Framework\Config\View::getItemsher zaman boş bir dizi döndürür.

İkincisi, işlev \Magento\Framework\View\Asset\Bundle\Manager::isExcludedFileher zaman geri dönecektirfalse

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

Çünkü $asset->getSourceFile()varlık dosyasına mutlak yol, $filePathInfo['excludedPath']göreceli yol ise.

Yani, gördüğüm kadarıyla <exclude>yapılandırma yine de çalışmaz. Ama eğer işe yarayacaksa, varlık \Magento\Framework\View\Asset\Bundle.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.