Schließen Sie custsule Js von der Minimierung von Js in Magento2 aus

7

Ich versuche, JS in zu minimieren Magento 2.
Im Backend gibt es eine Option: Stores -> Configuration -> Advanced -> Developer, um js zu minimieren. Ich habe das getan und JS wurde minimiert, aber es enthält auch das JS meines benutzerdefinierten Moduls.

Es sollte mein benutzerdefiniertes Modul JS nicht enthalten, da es bereits minimiertes JS enthält. Ich möchte diese JS von der Minifizierung ausschließen.

Murali Raj
quelle

Antworten:

11

In Ihrem benutzerdefinierten Modul möchten Sie einen Interceptor hinzufügen \Magento\Framework\View\Asset\Minification::getExcludes, der die Dateien festlegt, die von der Minimierung ausgeschlossen werden sollen.

Ihre Dateien würden ungefähr so ​​aussehen:

di.xml

<?xml version="1.0" encoding="utf-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\View\Asset\Minification">
        <plugin name="my-exclude" type="Vendor\Module\Plugin\ExcludeFilesFromMinification" />
    </type>
</config>

ExcludeFilesFromMinification.php (Unterstützende Versionen unter 2.2)

<?php

namespace Vendor\Module\Plugin;
use Magento\Framework\View\Asset\Minification;

class ExcludeFilesFromMinification
{
    public function aroundGetExcludes(Minification $subject, callable $proceed, $contentType)
    {
        $result = $proceed($contentType);
        if ($contentType != 'js') {
            return $result;
        }
        $result[] = 'Vendor_Module/js/your-js-filename';
        return $result;
    }
}

ExcludeFilesFromMinification.php (Unterstützung von 2.2+)

<?php

namespace Vendor\Module\Plugin;
use Magento\Framework\View\Asset\Minification;

class ExcludeFilesFromMinification
{
    public function afterGetExcludes(Minification $subject, array $result, $contentType)
    {
        if ($contentType == 'js') {
            $result[] = 'Vendor_Module/js/your-js-filename';
        }
        return $result;
    }
}
Navarr
quelle
Diese Antwort ist konfliktsicherer und sollte in allen Fällen funktionieren
Milan Simek
2

Seit Magento 2.3 ist es nun möglich, zusätzliche Ausschlüsse über ein Modul etc/config.xmlmit folgender Syntax zu definieren:

<config>
    <default>
        <dev>
            <js>
                <minify_exclude>
                    <example1>/example1/</example1>
                </minify_exclude>
            </js>
            <css>
                <minify_exclude>
                    <example2>/example2/</example2>
                </minify_exclude>
            </css>
        </dev>
    </default>
</config>

Alle diese Werte werden jetzt mit dem vorherigen Wert zusammengeführt, anstatt ihn zu überschreiben.

Die Pull-Anforderung für diese Änderung finden Sie hier: https://github.com/magento/magento2/pull/13687

Andreas S - Vaimo
quelle
1

Dies hat bei einem anderen Problem geholfen , könnte aber hier nützlich sein ...

Fügen Sie in der Datei config.xml Ihres Moduls Folgendes hinzu:

<default>
    <dev>
        <js>
            <minify_exclude>
                your-js-filename
            </minify_exclude>
        </js>
    </dev>
</default>
Toni Procter
quelle
3
Dies wird funktionieren , ist aber eine schlechte Lösung, da es die Standardeinstellung (tiny_mce)
ändert
@ Navarr Ich glaube nicht, dass es tut? Wenn ich richtig bin, werden die Werte jedes XML-Knotens minify_exclude als Array von \ Magento \ Framework \ App \ Config
Milan Simek
2
@milan verwendet definitiv die Bereichskonfiguration und verwandelt dann nur Zeilen in ein Array. github.com/magento/magento2/blob/2.2-develop/lib/internal/…
Navarr
1
@ Navarr Ich habe es getestet und kann bestätigen, dass Sie richtig sind. Der Standardwert tiny_mce wird überschrieben. Wenn mehrere Module diese Methode verwenden, führt dies mit Sicherheit zu Konflikten.
Milan Simek
1
@ Rob das könnte tatsächlich der Fall sein. Meine Tests zeigten, dass Navarr korrekt ist, als er darauf hinwies, dass ein Abfangjäger anstelle von config.xml verwendet werden sollte
Milan Simek
1

Sie müssen den Wert von 'dev / js / minify_exclude' auf core_config_dataeine Liste ignorierter Skripte aktualisieren (Pipe getrennt).
Beachten Sie, dass es sich praktisch um ein Regex-Muster handelt, das Magento verwendet, um Skripte von der Minimierung auszuschließen.
Daher kann es zum Beispiel so aussehen:

https://www.somedomain.com/somescript.js|https://www.another-url.com/anotherscript.js|https://www.blablabla.net/blablabla.js

Danach müssen Sie alle Caches und Pub / Static-Dateien leeren und den statischen Inhalt erneut bereitstellen.

* Sie können auch die Datei pub / static / frontend / {Vendor} / {Theme} / {Locale} /requirejs-min-resolver.min.js überprüfen und Ihre Liste in der Datei url.match (...) anzeigen.

Pini
quelle
0

Die einfachste Lösung besteht darin, Ihre Dateien so umzubenennen, dass sie mit * .min.js enden. Dies ist ohnehin eine gute Vorgehensweise. Magento erkennt die Dateien als bereits minimiert und überspringt sie.

skymeissner
quelle