Erstellung einer Headless-WordPress-Website mit Frontity

Avatar of Ganesh Dahal
Ganesh Dahal am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Frontity ist ein auf WordPress fokussiertes, React-basiertes serverseitiges Dynamic-Rendering-Framework (puh!), das uns die Erstellung schneller Headless-Websites ermöglicht. Chris hat eine gute Einführung in Frontity. Ich denke, man könnte es sich wie Next.js für WordPress vorstellen. Und obwohl die Nachfrage nach Headless-WordPress-Websites derzeit eine Nische sein mag, zeigt die Showcase-Seite von Frontity, dass es dafür Begeisterung gibt.

Die Dokumentation, Tutorials und Anleitungen von Frontity konzentrieren sich auf die Erstellung von Headless-Blog-Websites, und seine Showcase-Seite listet über 60 Websites auf, darunter CNBC Africa, Forbes Africa, Hoffmann Academy, Aleteia, Diariomotor und andere. In dieser Liste schafften es fünf Headless-WordPress-Websites als produktionsreife Showcase-Studien.

Die offizielle Website von Frontity selbst ist ein sehr interessanter Anwendungsfall auf Produktionsebene, der zeigt, wie der WordPress Block Editor erfolgreich mit dem Frontity-Framework verbunden werden kann.

Ich werde Sie in diesem Artikel durch die Schritte zur Erstellung einer Frontity-Website führen und anschließend einen weiteren Artikel über die Verwendung und Anpassung des Standard-Mars-Themes von Frontity veröffentlichen. Wir beginnen mit diesem Beitrag, in dem wir die Grundlagen der Einrichtung einer Headless-WordPress-Website auf dem Frontity-Framework behandeln.

Dies ist kein Experten-Leitfaden, sondern eher die Reise eines Headless-WordPress-Enthusiasten auf dem Weg, die Frontity-Erfahrung kennenzulernen. Für eine detailliertere und maßgebliche Anleitung konsultieren Sie bitte die Dokumentation von Frontity. Frontity-Doku.

Voraussetzungen und Anforderungen

Da Frontity ein React-basiertes Framework ist, empfehle ich, Grundkenntnisse in React und JavaScript mit ES6-Funktionen zu haben. Die Tutorial-Doku von Frontity beschreibt einige zusätzliche Anforderungen, einschließlich

  • Gute Kenntnisse in HTML und CSS
  • Erfahrung mit der Kommandozeile
  • Ein Node.js-Server
  • Und natürlich ein Code-Editor

Bereit? Los geht's!

Lernen wir Frontity kennen

Chris hat hier bereits erklärt, was Frontity ist und wie es funktioniert. Frontity ist ein auf WordPress fokussiertes und meinungsbildendes React-Framework mit eigenem State Manager und CSS-Styling-Lösungen. Die kürzlich aktualisierte Frontity-Architektur beschreibt, wie ein Frontity-Projekt entweder im decoupled mode oder embedded mode ausgeführt werden kann.

Im decoupled mode (siehe unten) holt Frontity REST-API-Daten von einem WordPress PHP-Server und gibt das endgültige HTML an die Benutzer als isomorphe React-App (verwendet im benutzerdefinierten Theme) zurück. In diesem Modus verweist die Hauptdomain auf Frontity, während eine Subdomain auf die WordPress-Website verweist.

Screenshot showing Decoupled mode (left) and Embedded mode diagram from Frontity doc.

Im embedded mode ersetzt das Frontity-Theme-Paket (eine isomorphe React-App) das WordPress PHP-Theme über ein erforderliches Frontity Embedded Mode-Plugin. Das Plugin führt eine interne HTTP-Anfrage an den Frontity/Node.js-Server durch, um die HTML-Seiten abzurufen. In diesem Modus verweist die Hauptdomain auf WordPress, wo sowohl Website-Besucher als auch Content-Redakteure dieselbe Domain verwenden, während Frontity die sekundäre Domain (d.h. Subdomain) verwendet.

Frontitys integrierte AMP-Funktion generiert eine vereinfachte Version von HTML-Seiten für ein schnelleres serverseitiges Rendering und überwindet so multiple WordPress-Anfragen. Sie bietet ein dynamischeres statisches Website-Erlebnis, das schnell ist und eine integrierte Server-Erweiterbarkeit bietet, die weiter verbessert werden könnte, indem eine Serverless Pre-rendering (SPR) (auch bekannt als stale-while-revalidate Cache) Technik über KeyCDN und StackPath genutzt wird.

Mehr über den Frontity-Modus erfahren Sie in der Frontity-Architektur-Dokumentation.

Frontity-Website-Installation

Um unser Projekt zu starten, müssen wir eine Frontity-Projekt-Website und eine WordPress-Installation als Datenquellenendpunkt einrichten. In den folgenden Abschnitten lernen wir, wie wir unsere Frontity-Website einrichten und mit unserer WordPress-Installation verbinden. Die Frontity-Schnellstartanleitung ist eine sehr praktische Schritt-für-Schritt-Anleitung, und die folgende Anleitung ermöglicht es uns, unser Frontity-Projekt einzurichten.

Überprüfen Sie zunächst, ob Node.js und npm bereits auf Ihrem Computer installiert sind. Wenn nicht, laden Sie sie herunter und installieren Sie sie.

#! check node -- version
node --version
V14.9.0 #! output if installed
#! check npm version
npm --version
6.14.7  #! output if installed
#! to upgrade npm to latest version
npm install npm@latest -g

Schritt 1: Erstellen eines Frontity-Projekts

Führen wir den folgenden Befehl mit der Frontity CLI aus, um ein neues Projekt namens my-frontity zu erstellen.

### creating a frontity project
npx frontity create my-frontity

Der obige Code erzeugt die folgende Ausgabe.

Screenshot of Frontity project creation using frontity create app CLI command

Schritt 2: Auswahl des Frontity Mars-Themes

Frontity bietet zwei Themes: twentytwenty-theme und mars-theme. Für den Anfang empfiehlt Frontity die Auswahl des Mars-Themes und gibt die folgende Ausgabe aus.

Screenshot of showing cloning of mars-theme files & folder created during the project installation

Wenn Sie die Aufforderung zur E-Mail-Adresse beantworten, sollte eine gültige E-Mail-Adresse eingegeben werden. Ich fand es nützlich, die E-Mail beim ersten Mal einzugeben, damit ich mit den Frontity-Entwicklern in Kontakt bleiben kann, aber danach habe ich keinen Nutzen mehr gesehen.

Schritt 3: Frontity-Projektinstallation

Der Frontity-Server installiert das Projekt und seine Abhängigkeiten. Bei erfolgreicher Installation sollte die folgende Ausgabe angezeigt werden.

Screenshot showing completed built process with frontity dev CLI command

Schritt 4: Verzeichnis wechseln und Entwicklungsserver neu starten

Um in den Projektordner zu gelangen, wechseln Sie das Verzeichnis mit dem folgenden Befehl und starten Sie den Server, um das neu erstellte Projekt anzuzeigen.

### change dir to project folder
cd my-frontity

Der Frontity-Entwicklungsserver kann mit dem folgenden Befehl gestartet werden.

### start development server with npx
npx frontity dev

### starting dev server with yarn
yarn frontity dev

Wenn der Entwicklungsserver erfolgreich gestartet wurde, kann das Projekt unter https://:3000 aufgerufen werden und sollte den folgenden Bildschirm im Browser anzeigen.

Screenshot showing installed Frontity front-end app with frontity mars-theme, including a large blue header that holds the site title and description in white, then a tabbed navigation, followed by body content against a light gray background.

Der obige Screenshot zeigt das Frontend einer abgeschlossenen, von Frontity angetriebenen WordPress-Website mit dem Mars-Theme. Die Website ist noch nicht mit unserer eigenen verbunden, was wir im nächsten Abschnitt behandeln werden.

Abschnitt 2: WordPress-Website-Installation

Wir benötigen eine WordPress-Website als Datenquelle. Wir können entweder eine bereits installierte Website verwenden oder eine neue Test-Website auf Ihrem lokalen Rechner installieren. Für dieses Projekt habe ich die neueste Version von WordPress auf meinem Rechner mit Local installiert und die Theme-Testdaten importiert, die auch Testdaten für die Block-Editor-Styling enthalten.

The site displayed in the default WordPress Twenty Twenty theme, with magenta colored links and a soft beige background.

In neueren Versionen von WordPress ist die WordPress REST API direkt in den WordPress-Core integriert. Wir können also überprüfen, ob sie unsere wp-content-Daten öffentlich erweitert, indem wir /wp-json an die URL unserer Website anhängen (z. B. http//mytestsite.local/wp-json). Dies sollte den Inhalt im JSON-Format zurückgeben. Dann sind wir bereit weiterzumachen.

Screenshot showing output in JSON format.

Eine weitere Bedingung, die Frontity in unserer WordPress-Installation verlangt, ist die Aktivierung der schönen Permalinks (Post Name) unter Einstellungen > Permalinks.

Screenshot showing activated pretty permalinks.

Abschnitt 3: Verbindung des Frontity-Projekts mit WordPress

Um unsere WordPress-Website mit dem Frontity-Projekt zu verbinden, sollten wir die Datei frontity.settings.js aktualisieren.

// change source URL in frontity.settings.js
const settings = {
  ...,
  packages: [
    ...,
    {
      name: "@frontity/wp-source",
      state: {
        source: {
          // Change this url to point to your WordPress site.
          api: "http://frontitytest.local/wp-json"
        }
      }
    }
  ]
}

Bitte beachten Sie, dass wir beim Aktualisieren der URL zu unserer WordPress-Installation den Namen des state.source-Objekts von url in api ändern müssen (wie oben hervorgehoben) und die Datei mit unseren Updates speichern. Starten Sie den Entwicklungsserver neu, und wir werden sehen, dass die Frontity-Website nun mit unserer eigenen WordPress-Website verbunden ist.

Screenshot showing URL source change (left) and content displayed from our WordPress site (right).

Im obigen Screenshot werden Sie feststellen, dass die Menüpunkte (Nature, Travel, Japan, About Us) immer noch von der Frontity-Demoseite angezeigt werden, was wir im nächsten Schritt beheben werden.

Schritt 1: Aktualisierung unseres Menüs in der Frontity-Website

WordPress behandelt Menüpunkte als private benutzerdefinierte Post-Typen und sind nur für diejenigen sichtbar, die in WordPress angemeldet sind. Bis zur Veröffentlichung der WordPress REST-API Version 2 werden Menüpunkte nicht als sichtbare Endpunkte exponiert, aber registrierte Menüs können mithilfe des WP-REST-API V2 Menüs Plugins erweitert werden.

Da Menüpunkte selten geändert werden, sind die Menüpunkte des Frontity Mars-Themes oft hartcodiert in der Datei frontity.settings.js, um als Zustand gespeichert und dann an die index.js-Datei exportiert zu werden. Für dieses Demo-Projekt habe ich das WordPress-Website-Menü wie im Frontity Mars-Theme beschrieben mit Kategorien und Tags erstellt.

Als Nächstes fügen wir unsere Menüpunkte zur Datei frontity-settings.js hinzu, wie im Frontity Mars-Theme beschrieben.

// add menu items in frontity-settings.js
{
  name: "@frontity/mars-theme",
  state: {
    theme: {
      menu: [
        ["Home", "/"],
        ["Block", "/category/block/"],
        ["Classic", "/category/classic/"],
        ["Alignments", "/tag/alignment-2/"],
        ["About", "/about/"]
      ],
      featured: {
        showOnList: true,
        showOnPost: true
      }
    }
  }
},

Speichern wir unsere Änderungen und starten Sie den Entwicklungsserver wie zuvor neu. Wir sollten die Menüpunkte (Block, Classic, Alignment, About) von unserer eigenen Website im Header-Bereich sehen.

Screenshot showing menu items (left) and updated menu items in our Frontity site (right)

Die Zeilen 13-16 definieren, ob wir das Vorschaubild auf der Liste (z.B. Indexseite) oder im Beitrag (z.B. Einzelbeitragsseite) anzeigen möchten.

Schritt 2: Ordnerstruktur des Frontity-Projekts

Unser frontity-demo-Projekt (wir haben den Projektnamen von my-frontity geändert) sollte zwei Dateien, package.json und frontity.settings.js, sowie die Ordner node_modules/ und packages/mars-theme enthalten.

### File structure
frontity-demo/
|__ node_modules/
|__ package.json
|__ frontity.settings.js
|__ favicon.ico
|__ packages/
    |__ mars-theme/

Eine kurze Beschreibung der Dateien/Ordner, wie in der Frontity-Doku beschrieben.

  • node_modules: Hier werden die Abhängigkeiten des Frontity-Projekts installiert (sind nicht zur Bearbeitung vorgesehen).
  • packages/ : Ein Ordner mit dem installierten mars-theme. Der Theme-Ordner enthält einen src-Ordner, der benutzerdefinierte Pakete und möglicherweise einige Kernpakete von Frontity enthält, die nach Wunsch bearbeitet und angepasst werden können. Alles in Frontity ist ein Paket.
  • frontity.setiings.js: Dies ist die wichtigste Datei, in der die grundlegende Einrichtung unserer App bereits vorgenommen wurde. Derzeit sind diese Einstellungen Frontity-Standardeinstellungen, aber alle gewünschten Einstellungen und Erweiterungen werden in dieser Datei konfiguriert. Zum Beispiel werden die Datenquellen-URL (z. B. WordPress-Website-URL) und erforderliche Pakete und Bibliotheken zur Ausführung des Projekts unter dem Frontity State-Paket definiert.
  • package.json: Datei, in der die für die Funktion Ihrer App erforderlichen Abhängigkeiten deklariert sind.

Wir werden uns später mit Frontity-Theme-Paketen und anderen Abhängigkeiten beschäftigen, da diese eine tiefere Erklärung erfordern.

Schritt 3: Modifizierung von Stilen

Frontity verwendet die beliebte CSS-in-JS-Bibliothek Emotion zum Stylen seiner Komponenten. Frontitys Standard-Mars-Theme ist mit Styled Components styled, die von @emotion/syled verfügbar sind. Styled Components ähneln stark CSS. Später in anderen Abschnitten werden wir uns eingehend mit dem Styling eines Frontity-Projekts beschäftigen und anhand eines Anwendungsbeispiels das Styling des gesamten Mars-Themes modifizieren.

Fürs Erste führen wir eine schnelle Demonstration durch, bei der wir die Farbe unseres Website-Titels und -Beschreibungsfeldes ändern. Die Stile für Header und Beschreibung sind als Title- und Description-Styled-Components am Ende der header.js-Komponente definiert. Nun ändern wir die Titel-Farbe in Gelb und die Beschreibungs-Farbe in eine Art Aqua (linkes Feld). Wir sehen, dass die Änderungen in unserem Website-Header widergespiegelt werden.

Abschnitt 4: Bereitstellung der Website auf Vercel

Frontity listet drei beliebte Hosting-Anbieter für das Hosting eines Frontity-Projekts auf, darunter Vercel, Moovweb XDN und Heroku. In der Praxis scheint es jedoch, dass die meisten Frontity-Projekte auf Vercel gehostet werden, da Chris schreibt: „es ist eine perfekte Ergänzung für Vercel.“ Frontity empfiehlt Vercel nachdrücklich und hat eine praktische Schritt-für-Schritt-Anleitung zur Bereitstellung vorbereitet.

Schritt 1: Erstellen einer Produktionsversion des Frontity-Projekts

Während der Entwicklung unseres Frontity-Projekts verwenden wir den Befehl npx frontity dev. Für die Bereitstellung sollten wir eine Produktionsversion des Projekts vom Stammverzeichnis unseres Frontity-Projekts aus erstellen.

#! create production version of project
npx frontity build

Dies erstellt einen Build-Ordner, „der sowohl unsere isomorphen React-App und den Frontity (Node.js)-Server des Frontity-Projekts enthält und dessen Inhalt für den Befehl npm frontity serve verwendet wird.“

Schritt 2: Erstellen eines Kontos bei Vercel

Zuerst sollten wir ein Vercel-Konto erstellen, indem wir diesem Anmeldeformular folgen, was wir mit unseren GitHub-Anmeldedaten tun können. Wir sollten uns vom Stammverzeichnis unseres Frontity-Projekts im Terminal anmelden.

#! login to vercel
npx vercel login

Schritt 3: Erstellen der Datei vercel.json

Um unsere Website auf Vercel bereitzustellen, benötigen wir die folgende vercel.json-Datei im Stammverzeichnis unseres Projekts.

{
  "version": 2,
  "builds": [
    {
      "src": "package.json",
      "use": "@frontity/now"
    }
  ]
}

Schritt 4: Bereitstellung auf Vercel

Schließlich stellen wir unser Projekt mit dem vercel Befehl vom Stammverzeichnis unseres Projektordners aus bereit.

#! deployment vercel
npx vercel

Als Nächstes werden uns kurze, bereitstellungsbezogene Fragen gestellt.

Vercel assigns a temporary domain (e.g.  your-project-name.vercel.app) for our site. This Frontity doc describes how to customize site domain and nameserver settings.

Zusammenfassung

Wenn Sie meine anderen Artikel über Headless-WordPress-Websites mit dem Gatsby-Framework gelesen haben, hatte ich eine bewundernswerte, aber frustrierende Erfahrung, hauptsächlich aufgrund meiner eigenen technischen Fähigkeiten, um fortschrittliche Frameworks als Ein-Mann-Team zu lernen und zu warten. Dann stieß ich auf das Frontity React Framework, als ich einen Artikel auf CSS-Tricks las.

Wie wir aus diesem und Chris' Artikel gelernt haben, ist die Erstellung einer Headless-WordPress-Website mit Frontity alles in allem ziemlich einfach. Ich bin sehr beeindruckt von der einfachen Einrichtung, der optimierten Benutzeroberfläche und es scheint eine bessere Option für weniger technisch versierte Benutzer zu sein. Sie erhalten zum Beispiel alle WordPress-Inhalte, ohne eine einzige Abfrage schreiben zu müssen.

In einem Folgeartikel werden wir uns eingehend mit dem Standard-Frontity Mars-Theme beschäftigen und lernen, wie wir es anpassen können, um es zu unserem eigenen zu machen.

Danksagungen und Ressourcen