Entwickeln von SPAs für AEM developing-spas-for-aem
Single Page Applications (SPAs) können Nutzerinnen und Nutzern von Websites ein überzeugendes Erlebnis bieten. Entwicklungspersonen möchten Sites mit SPA-Frameworks erstellen und Autorinnen bzw. Autoren möchten Inhalte in AEM nahtlos für eine Site bearbeiten, die mit diesen Frameworks erstellt wurde.
Dieser Artikel stellt wichtige Fragen vor, die bei der Beauftragung von Frontend-Entwicklungspersonen mit der Entwicklung einer SPA für AEM zu beachten sind, und gibt einen Überblick über die Architektur von AEM im Hinblick auf die Bereitstellung von SPAs auf AEM.
- der universelle Editor zum visuellen Bearbeiten von Headless-Inhalten.
- der Inhaltsfragmenteditor zur formularbasierten Bearbeitung von Headless-Inhalten
SPA-Entwicklungsgrundsätze für AEM spa-development-principles-for-aem
Bei der Entwicklung von Single Page Applications in AEM wird davon ausgegangen, dass sich die Frontend-Entwicklungspersonen beim Erstellen einer SPA an die üblichen Best Practices halten. Wenn Sie als Frontend-Entwicklerin bzw. -Entwickler diese allgemeinen Best Practices sowie einige AEM-spezifische Prinzipien befolgen, wird Ihre SPA mit AEM und seinen Inhaltsverfassungsfunktionen zusammenarbeiten.
- Portabilität: Wie alle anderen Komponenten auch sollten die Komponenten so portabel wie möglich gestaltet werden. Die SPA sollte aus portablen und wiederverwendbaren Komponenten bestehen.
- AEM verwaltet die Site-Struktur: Die Frontend-Entwicklungsperson erstellt Komponenten und ist für deren interne Struktur verantwortlich, verlässt sich für die Definition der Inhaltsstruktur der Site jedoch auf AEM.
- Dynamisches Rendering: Alle Rendering-Vorgänge sollten dynamisch sein.
- Dynamisches Routing: Die SPA ist für das Routing verantwortlich; AEM lauscht darauf und ruft Inhalte auf dieser Basis ab. Jegliches Routing sollte ebenfalls dynamisch sein.
Wenn Sie sich bei der Entwicklung Ihrer SPA an diese Grundsätze halten, wird diese so flexibel und zukunftssicher wie möglich sein sowie die Nutzung aller unterstützten AEM-Authoring-Funktionen ermöglichen.
Wenn Sie keine Unterstützung für AEM-Authoring-Funktionen benötigen, sollten Sie ein anderes SPA-Design-Modell in Betracht ziehen.
Portabilität portability
Wie bei der Entwicklung von Komponenten sollten Ihre Komponenten so gestaltet sein, dass sie maximale Portabilität aufweisen. Alle Muster, die der Portabilität oder Wiederverwendbarkeit der Komponenten zuwiderlaufen, sollten vermieden werden, um Kompatibilität, Flexibilität und Wartbarkeit in Zukunft zu garantieren.
Die resultierende SPA sollte mit hochgradig portablen und wiederverwendbaren Komponenten erstellt werden.
AEM verwaltet die Site-Struktur aem-drives-site-structure
Die Frontend-Entwicklungsperson muss sich als verantwortlich für die Einrichtung einer Bibliothek mit SPA-Komponenten betrachten, die zum Erstellen der App verwendet werden. Die Frontend-Entwicklungsperson hat die vollständige Kontrolle über die interne Struktur der Komponenten. Die Struktur der Site gehört jedoch immer AEM.
Diese Kontrolle bedeutet, dass die Frontend-Entwicklungsperson Kundeninhalte vor oder nach dem Einstiegspunkt der Komponenten hinzufügen und innerhalb der Komponente auch Drittanbieter-Aufrufe durchführen kann. Die Frontend-Entwicklungsperson hat jedoch zum Beispiel nicht die volle Kontrolle darüber, wie Komponenten verschachtelt werden.
Dynamisches Rendering dynamic-rendering
Die SPA sollte sich nur auf dynamisches Rendering von Inhalten stützen. Diese Erwartung ist der Standard, bei dem AEM alle untergeordneten Elemente der Inhaltsstruktur abruft und rendert.
Jedes explizite Rendering, das auf bestimmte Inhalte verweist, gilt als statisches Rendering und wird zwar unterstützt, ist jedoch nicht mit den Inhaltserstellungsfunktionen von AEM kompatibel. Es widerspricht auch dem Grundsatz der Portabilität.
Dynamisches Routing dynamic-routing
Wie beim Rendering auch sollte das gesamte Routing dynamisch sein. In AEM sollte die SPA stets für das Routing verantwortlich sein; AEM lauscht darauf und ruft Inhalte auf dieser Basis ab.
Jedes statische Routing verstößt gegen den Grundsatz der Portabilität und schränkt den Autor ein, da es nicht mit den Inhaltserstellungsfunktionen von AEM kompatibel ist. Wenn beispielsweise Inhaltsautorinnen oder -autoren bei statischem Routing eine Route ändern oder eine Seite ändern möchten, müssen sie die Frontend-Entwicklungsperson bitten, dies zu tun.
AEM-Projektarchetyp aem-project-archetype
Für jedes AEM-Projekt sollte der AEM-Projektarchetyp genutzt werden, der SPA-Projekte mithilfe von React oder Angular unterstützt und das SPA-SDK verwendet.
SPA-Design-Modelle spa-design-models
Wenn die Prinzipien der Entwicklung von SPAs in AEM befolgt werden, wird Ihre SPA mit allen unterstützten Inhaltserstellungsfunktionen von AEM zusammenarbeiten.
Es kann jedoch Fälle geben, in denen diese Funktionalität nicht unbedingt erforderlich ist. Die folgende Tabelle bietet einen Überblick über die verschiedenen Design-Modelle sowie ihre Vor- und Nachteile.
Migrieren vorhandener SPAs zu AEM migrating-existing-spas-to-aem
Wenn Ihre SPA den SPA-Entwicklungsprinzipien für AEM entspricht, funktioniert Ihre SPA in AEM und kann mit dem AEM-SPA-Editor bearbeitet werden.
Führen Sie die folgenden Schritte aus, um Ihre bestehende SPA für die Zusammenarbeit mit AEM bereitzumachen.
- Gestalten Sie Ihre JS-Komponenten modular. – Gestalten Sie sie so, dass sie in beliebiger Reihenfolge, Position und Größe gerendert werden können.
- Verwenden Sie die vom SDK bereitgestellten Container, um Ihre Komponenten auf dem Bildschirm zu platzieren. – AEM bietet eine Seiten- und Absatzsystemkomponente, die Sie verwenden können.
- Erstellen Sie für jede JS-Komponente eine AEM-Komponente. – Die AEM-Komponenten definieren das Dialogfeld und die JSON-Ausgabe.
Anweisungen für Frontend-Entwickler instructions-for-front-end-developers
Wenn eine Frontend-Entwicklungsperson damit beauftragt wird, eine SPA für AEM zu erstellen, besteht die wichtigste Aufgabe darin, sich mit ihr auf die Komponenten und ihre JSON-Modelle zu einigen.
Im Folgenden werden die Schritte erläutert, die eine Frontend-Entwicklungsperson bei der Entwicklung einer SPA für AEM befolgen muss.
-
Einigen Sie sich hinsichtlich der Komponenten und ihrer JSON-Modelle
AEM-Frontend/Backend-Entwicklungspersonen müssen sich auf die erforderlichen Komponenten und ein Modell einigen, damit eine Eins-zu-Eins-Übereinstimmung der SPA-Komponenten mit den Backend-Komponenten besteht.
AEM-Komponenten sind weiterhin erforderlich, insbesondere um Bearbeitungsdialogfelder bereitzustellen und das Komponentenmodell zu exportieren.
-
In React-Komponenten greifen Sie auf das Modell zu über
this.props.cqModel
Sobald Komponenten vereinbart sind und das JSON-Modell vorhanden ist, kann der Frontend-Entwickler die SPA entwickeln und über
this.props.cqModel
bequem auf das JSON-Modell zugreifen. -
Implementieren der
render()
-Methode der KomponenteDer Frontend-Entwickler implementiert die
render()
-Methode nach Belieben und kann die Felder dercqModel
-Eigenschaft verwenden. Diese Methode gibt das DOM und die HTML-Fragmente aus, die in die Seite eingefügt werden. Diese Methode ist auch die Standardmethode zur Erstellung einer App in React. -
Ordnen Sie die Komponente dem AEM-Ressourcentyp zu via
MapTo()
Die Zuordnung speichert Komponentenklassen und wird von der bereitgestellten
Container
-Komponente intern zum Abrufen und dynamischen Instanziieren von Komponenten basierend auf dem angegebenen Ressourcentyp genutzt.Diese Zuordnung dient als „Kleber“ zwischen Front- und Backend, sodass der Editor weiß, welchen Komponenten die React-Komponenten entsprechen.
Page
undResponsiveGrid
sind gute Beispiele für Klassen, die den grundlegendenContainer
erweitern. -
Definieren Sie
EditConfig
der Komponente als Parameter fürMapTo()
Dieser Parameter teilt dem Editor mit, wie die Komponente benannt werden soll, solange sie noch nicht gerendert ist oder über keinen zu rendernden Inhalt verfügt.
-
Erweitern Sie die bereitgestellte
Container
-Klasse für Seiten und ContainerSeiten und Absatzsysteme sollten diese Klasse erweitern, damit die Übertragung an innere Komponenten erwartungsgemäß funktioniert.
-
Implementieren Sie eine Routing-Lösung, die die HTML5-
History
-API verwendet.Wenn
ModelRouter
aktiviert ist, löst der Aufruf der FunktionenpushState
undreplaceState
eine Anfrage anPageModelManager
aus, um ein fehlendes Fragment des Modells abzurufen.Die aktuelle Version von
ModelRouter
unterstützt nur die Verwendung von URLs, die auf den tatsächlichen Ressourcenpfad von Sling-Modell-Einstiegspunkten verweisen. Der Einsatz von Vanity-URLs oder -Aliassen wird nicht unterstützt.Der
ModelRouter
kann deaktiviert oder so konfiguriert werden, dass eine Liste von regulären Ausdrücken ignoriert wird.
AEM-Agnostik aem-agnostic
Diese Code-Blöcke veranschaulichen, dass Ihre React- und Angular-Komponenten nichts Spezifisches für Adobe oder AEM benötigen.
- Alles, was sich in der JavaScript-Komponente befindet, ist AEM-agnostisch.
- AEM-spezifisch ist jedoch, dass die JS-Komponente mit dem MapTo-Hilfsprogramm einer AEM-Komponente zugeordnet werden muss.
Das MapTo
-Hilfsprogramm ist die Verbindung, die eine Abstimmung zwischen Backend- und Frontend-Komponenten ermöglicht:
- Es teilt dem JS-Container (oder dem JS-Absatzsystem) mit, welche JS-Komponente für das Rendern der einzelnen Komponenten, die in der JSON vorhanden sind, verantwortlich ist.
- Es wird ein HTML-Datenattribut zum HTML-Code hinzugefügt, das die JS-Komponente rendert, damit der SPA-Editor weiß, welches Dialogfeld dem Autor beim Bearbeiten der Komponente angezeigt werden soll.
Weitere Informationen zum Verwenden von MapTo
und Erstellen von SPAs für AEM im Allgemeinen finden Sie im Handbuch „Erste Schritte“ für Ihr ausgewähltes Framework.
AEM-Architektur und SPAs aem-architecture-and-spas
Die allgemeine Architektur von AEM einschließlich Umgebungen für Entwicklung, Authoring und Veröffentlichung ändert sich bei Verwendung von SPAs nicht. Es ist jedoch hilfreich zu verstehen, wie die SPA-Entwicklung mit dieser Architektur verbunden ist.
-
Build-Umgebung
In dieser Umgebung wird die Quelle für die SPA-Anwendung und die Komponentenquelle ausgecheckt.
- Der NPM-clientlib-Generator erstellt aus dem SPA-Projekt eine Client-Bibliothek.
- Diese Bibliothek wird von Maven verwendet und vom Maven Build-Plugin zusammen mit der Komponente für AEM Author bereitgestellt.
-
AEM Author
Inhalte werden im AEM Author erstellt, einschließlich der Authoring-SPAs.
Wenn eine SPA in der Authoring-Umgebung mit dem SPA-Editor bearbeitet wird:
- Die SPA fordert den äußeren HTML-Code an.
- Das CSS wird geladen.
- Das JavaScript der SPA-Anwendung wird geladen.
- Sobald die SPA-Anwendung ausgeführt wird, wird die JSON angefordert, damit die App das DOM der Seite einschließlich der
cq-data
-Attribute erstellen kann. - Diese
cq-data
-Attribute ermöglichen es dem Editor, zusätzliche Seiteninformationen zu laden, sodass er weiß, welche Bearbeitungskonfigurationen für die Komponenten verfügbar sind.
-
AEM Publish
Hier werden die erstellten Inhalte und kompilierten Bibliotheken, einschließlich SPA-Anwendungsartefakte, Client-Bibliotheken und Komponenten, zur öffentlichen Nutzung veröffentlicht.
-
Dispatcher/CDN
Der Dispatcher dient für Besucherinnen und Besucher der Site als Zwischenspeicherebene von AEM.
- Anforderungen werden ähnlich wie in der AEM-Authoring-nstanz verarbeitet. Die Seiteninformationen werden jedoch nicht angefordert, da sie nur vom Editor benötigt werden.
- JavaScript, CSS, JSON und HTML werden zwischengespeichert, wodurch die Seite für eine schnelle Bereitstellung optimiert wird.
Nächste Schritte next-steps
- Erste Schritte mit SPAs in AEM unter Verwendung von React zeigt, wie unter Verwendung von React eine einfache SPA für die Zusammenarbeit mit dem SPA-Editor in AEM erstellt wird.
- Erste Schritte mit SPAs in AEM unter Verwendung von Angular zeigt, wie unter Verwendung von Angular eine einfache SPA für die Zusammenarbeit mit dem SPA-Editor in AEM erstellt wird.
- SPA-Editor – Überblick vertieft das Kommunikationsmodell zwischen AEM und der SPA.
- WKND-SPA-Projekt ist ein Schritt-für-Schritt-Tutorial zur Implementierung eines einfachen SPA-Projekts in AEM.
- Dynamisches Modell zur Komponentenzuordnung für SPAs erläutert das dynamische Modell für die Komponentenzuordnung und dessen Funktionsweise innerhalb von SPAs in AEM.
- SPA-Blueprint liefert gründlichere Informationen zur Funktionsweise des SPA-SDK für AEM, falls Sie SPAs für ein anderes Framework als React oder Angular implementieren möchten. Oder Sie möchten einfach ein tieferes Verständnis erlangen.