Cosa fa il tag “exclude” nel file view.xml di Magento 2


17

Il tema "vuoto" di Magento 2 include la seguente gerarchia di tag.

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

A cosa serve questo. cioè cosa viene escluso da cosa? Dove e quando il codice di sistema Magento 2 accede a queste informazioni?


5
Viene valutato nello stesso posto in cui ti abbiamo escluso da queste informazioni, Alan.
Benmark

6
@benmarks Essere esclusi dai dettagli di implementazione di un particolare sistema mi fa sentire più vicino alla maggior parte dei dipendenti di Magento Inc.;)
Alan Storm

Risposte:


10

Magento 2 supporta il raggruppamento di file js / html. <exclude>Il nodo definisce un elenco di risorse che non devono essere raggruppate. vedere \Magento\Framework\View\Asset\Bundle\Managerper i dettagli


2
Bundling? Cosa significa? Magento supporta un gestore di pacchetti ruby?
Alan Storm,

"Raggruppamento" significa combinare più risorse in un singolo pacchetto / file. È il miglioramento delle prestazioni del frontend diminuendo la quantità di richieste al server.
KAndy,

A quale raggruppamento si applica? Sembra che ci siano più posti in cui Magento "raggruppa" gli asset frontend.
Alan Storm,

Immagino che se è un file .js, lo caricherà singolarmente. Se non viene escluso, verrà unito in un file JS come siamo abituati con l'opzione JS Merge in M1. Se viene esclusa una directory, tutti i file in quella directory verranno caricati singolarmente.
Peter Jaap Blaakmeer,

Aggiornare; questo metodo conferma il mio sospetto; github.com/magento/magento2/blob/…
Peter Jaap Blaakmeer

9

Questa configurazione è accessibile quando si esegue il comando

bin/magento setup:static-content:deploy

Nella funzione \Magento\Deploy\Model\Deployer::deployFilesono interessanti le due chiamate seguenti:

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

La prima chiamata aggiungerà il file delle risorse al filesystem. Non sono sicuro di cosa faccia esattamente la seconda chiamata. Ecco dove mi sto perdendo.

Tuttavia, se segui questa seconda chiamata, troverai alcune funzioni di convalida, che alla fine porteranno a

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

Ma ci sono alcuni problemi qui.

Innanzitutto, la funzione \Magento\Framework\Config\View::getItemssembra sempre restituire un array vuoto.

In secondo luogo, la funzione \Magento\Framework\View\Asset\Bundle\Manager::isExcludedFiletornerà semprefalse

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

Perché $asset->getSourceFile()è il percorso assoluto del file di risorse, mentre $filePathInfo['excludedPath']è un percorso relativo.

Quindi, per quanto posso vedere la <exclude>configurazione non funzionerà comunque. Ma se funzionasse l'asset sarebbe escluso dal \Magento\Framework\View\Asset\Bundle.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.