Ist es möglich, eine requirejs-config.js
Datei über ein Magento-Design einzuschließen (oder RequireJS anderweitig zu konfigurieren)? Oder ist die Fähigkeit für Magento-Module reserviert? Die dev docs-Informationen zur Themenstruktur sind in diesem Punkt nicht eindeutig.
In den Entwicklerdokumenten wird nichts über RequireJS erwähnt. In den Designs ist jedoch ein enthalten web
, sodass Javascript mit ihnen gebündelt werden kann. Wenn Javascript mit einem Thema gebündelt werden kann, bedeutet dies, dass ein RequireJS-Modul mit einem Thema gebündelt werden kann, und wenn ein RequireJS-Modul mit einem Thema gebündelt werden kann, erfordert dieses Modul möglicherweise eine bestimmte RequireJS-Konfiguration.
Ich gehe naiv davon aus, dass Themen über diese Fähigkeit verfügen würden , aber ich konnte auf die eine oder andere Weise keine Dokumentation finden und habe keinen Nachmittag frei, um das erforderliche Code-Spelunking für Magentos requirejs-config.js
Datei durchzuführen, einschließlich.
quelle
Antworten:
Sie können tatsächlich eine require-config.js in Ihre Themen-Modulverzeichnisse aufnehmen.
Das Problem ist (eigentlich für unser Frontend-Team), dass es anscheinend keine Möglichkeit gibt, die Konfiguration zu überschreiben, sondern die Konfiguration zu erweitern.
Um das Magento_Theme-Modul hier als Beispiel zu betrachten: Wenn Sie eine require-config.js unter
<theme_base_dir>/Magento_Theme
dir hinzufügen , wird die config zur generierten require-config.js-Datei hinzugefügt und auch die config aus dem Magento_Theme-Modul wird hinzugefügt.Um Ihre Frage zu beantworten, habe ich auch versucht, eine require-config.js unter dem Themes-Verzeichnis
<theme_base_dir>/web
und auch unter dem Themes-Root -Verzeichnis hinzuzufügen . Beides hat nicht funktioniert. Update: Tatsächlich ist es gemäß der Antwort unten möglich, es in das Basisverzeichnis des Themas zu platzierenDie Antwort wäre also im Grunde ja, da Sie jede js-Anforderung unter jedem Modul hinzufügen könnten (themenbezogene js-Dateien können am besten unter dem Verzeichnis platziert werden
<theme_base_dir>/Magento_Theme
).Obwohl ich sagen würde, sollte es die Möglichkeit geben, ein themenbezogenes require-config.js außerhalb eines Moduls hinzuzufügen (vielleicht deaktivieren Sie das angegebene Modul) und es sollte auch möglich sein, ein Modul require-config.js zu überschreiben.
Beides scheint atm nicht möglich.
=== UPDATE ===
Tatsächlich scheint es möglich zu sein, eine themenspezifische require-config.js zu haben. Siehe die Antwort von @Gareth Daine weiter unten
quelle
path/to/theme/files/[etc/Magento_Theme
OK, ich glaube, ich habe es möglicherweise gelöst und bin der Meinung, dass die Dokumentation nicht eindeutig ist und aktualisiert werden muss, um den Prozess zu verdeutlichen.
Ich habe meine
requirejs-config.js
aus den Verzeichnissenweb/js
undweb
jeweils für beideMagento_Theme
und das Stammverzeichnis meines Themas um verschoben<Vendor>/<theme>
und jetzt wird meine RequireJS-Konfigurationrequirejs-config.js
mit allen anderen Includes in die Hauptkonfiguration eingebunden .Es scheint also, dass Sie die
requirejs-config.js
Datei an den folgenden Speicherorten einschließen müssen, basierend auf den Themen- / Modulanforderungen.Themenebene
app/design/frontend/<Vendor>/<theme>/requirejs-config.js
Modulebene
app/design/frontend/<Vendor>/<theme>/<Module_Name>/requirejs-config.js
In Ihrem
requirejs-config.js
für Ihr Thema sollten Sie Ihre Komponente einem Pfad zuordnen und dann verwenden,shim
um Abhängigkeiten zu deklarieren:Dann müssen Sie eine Vorlage erstellen, um die Initialisierung der Komponenten über ein
<script>
Tag zu speichern (es sei denn, Sie hängen sie direkt an ein Element in einer .phtml-Datei an).Alternativ binden Sie es an ein Element:
Dann einfach die .phtml Vorlage in Ihrem Layout Anweisungen enthalten zum Beispiel stellte ich Mine innerhalb der
default.xml
sich anapp/design/frontend/<Vendor>/<theme>/Magento_Theme/layout
unter dem Körperknoten und verwiesen:<block class="Magento\Framework\View\Element\Template" name="theme.js" template="Magento_Theme::html/js.phtml" />
quelle
Ich hatte nicht genügend Repräsentanten, um dies zu kommentieren, aber nur um zu bemerken, dass Gareths Antwort für mich nicht ganz funktionierte.
Das Umschließen der 'Komponente': 'js / Komponente' mit
'*':{}
hat den Trick gemacht.Anstatt eine Vorlagendatei zu erstellen, habe ich den folgenden Code oben hinzugefügt
app/design/frontend/<Vendor>/<theme>/Magento_Theme/layout/default.xml
quelle
Ja
requirejs-config.js
kann wie folgt zum Thema hinzugefügt werden. So füge ich eine dotdotdot-Bibliothek in mein Magento2-Design ein.1. Laden Sie die Js Library herunter und fügen Sie sie in Ihr Design ein. Gehen Sie dabei wie folgt vor:
2. Erstellen Sie die RequirementJS-Datei eines Themas wie folgt und teilen Sie den RequirementJS die neu hinzugefügte Bibliothek mit.
3. Verwenden Sie die hinzugefügte Bibliothek in der Haupt-JS-Datei Ihres Themas wie folgt:
4. und fügen Sie die js-Datei Ihres Themas wie folgt in den Kopf Ihrer Site ein:
Sie können jede externe JS-Bibliothek und benutzerdefinierte Datei auf jeder Seite in magento2 hinzufügen.
quelle
requirejs-config.js
diese Weise habe ich versucht, eine Bibliothek hinzuzufügen . RequireJS versucht dann jedoch,js/some.library.js
aus dem Stammverzeichnis statt aus dem Themenverzeichnis zu laden ..js
Erweiterung weglassen ... albern :)