Do czego służy tag „wykluczenie” w pliku view.xml Magento 2

17

Motyw „pustego” Magento 2 obejmuje następującą hierarchię znaczników.

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

Po co tu jest. tj. co jest wykluczone z czego? Gdzie i kiedy kod systemu Magento 2 uzyskuje dostęp do tych informacji?

Alan Storm
źródło
5
Jest oceniany w tym samym miejscu, w którym wykluczyliśmy Cię z tych informacji, Alan.
zyskuje
6
@benmarks Wykluczenie ze szczegółów implementacji konkretnego systemu sprawia, że ​​jestem bliżej większości pracowników Magento Inc.;)
Alan Storm

Odpowiedzi:

10

Magento 2 obsługuje pakowanie plików js / html. <exclude>węzeł definiuje listę zasobów, które nie powinny być wiązane. zobacz \Magento\Framework\View\Asset\Bundle\Managerszczegóły

KAndy
źródło
2
Wiązanie? Co to znaczy? Magento wspiera menedżera pakietów ruby?
Alan Storm,
„Sprzedaż wiązana” oznacza łączenie wielu zasobów w jeden pakiet / plik. Jest to poprawa wydajności interfejsu użytkownika poprzez zmniejszenie ilości żądań do serwera.
KAndy
Które pakietowanie wyklucza? Wydaje się, że istnieje wiele miejsc, w których Magento „pakuje” zasoby frontendowe.
Alan Storm,
Zgaduję, że jeśli jest to plik .js, załaduje go indywidualnie. Jeśli nie zostanie wykluczone, zostanie scalone w pliku JS, tak jak to robimy z opcją JS Merge w M1. Jeśli katalog zostanie wykluczony, wszystkie pliki w tym katalogu zostaną załadowane osobno.
Peter Jaap Blaakmeer
Aktualizacja; ta metoda potwierdza moje podejrzenia; github.com/magento/magento2/blob/…
Peter Jaap Blaakmeer
9

Dostęp do tej konfiguracji uzyskuje się po wykonaniu polecenia

bin/magento setup:static-content:deploy

W funkcji \Magento\Deploy\Model\Deployer::deployFileinteresujące są następujące dwa połączenia:

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

Pierwsze wywołanie doda plik zasobów do systemu plików. Nie jestem pewien, co dokładnie robi drugie połączenie. Tam się gubię.

Jeśli jednak podążasz za tym drugim wywołaniem, znajdziesz kilka funkcji sprawdzania poprawności, które ostatecznie prowadzą do

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

Ale tutaj jest kilka problemów.

Po pierwsze, funkcja \Magento\Framework\Config\View::getItemszawsze wydaje pustą tablicę.

Po drugie, funkcja \Magento\Framework\View\Asset\Bundle\Manager::isExcludedFilezawsze powrócifalse

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

Ponieważ $asset->getSourceFile()jest to ścieżka bezwzględna do pliku zasobów, natomiast $filePathInfo['excludedPath']ścieżka względna.

O ile widzę, <exclude>konfiguracja i tak nie będzie działać. Ale jeśli to zadziała, aktywa zostaną wyłączone z \Magento\Framework\View\Asset\Bundle.

Vicky
źródło