
Haben Sie von dem neuen JAMstack-Ansatz gehört? Die Möglichkeit, Webanwendungen in Ihrem bevorzugten Framework zu schreiben, Inhalte ĂŒber das Admin-Panel zu verwalten und vollstĂ€ndig gĂŒltige HTML-Seiten auszugeben, die gemÀà den neuesten Empfehlungen von SEO, PWA und a11y erstellt wurden.
Interessant? Dann ist hier eine Liste von Themen, die in diesem Artikel berĂŒcksichtigt werden mĂŒssen:
- Was ist dieser neue Stapel und warum wird er benötigt?
- Wie fĂŒhre ich eine Basisanwendung mit Gatsby aus?
- Arbeiten mit Inhalten und Erstellen des ersten Datenblocks
- Wie verknĂŒpfe ich Contentful und Gatsby mit GraphQL?
- Richten Sie die automatische Bereitstellung mit Netlify ein
Jamstack
Wie du weiĂt: "Alles Neue ist lĂ€ngst vergessen Altes" und hier ist eine weitere BestĂ€tigung - der Mod kehrt zu statischen Sites zurĂŒck. Was war das Internet vor zehn Jahren? Es war ein PHP-Server-Rendering, der Daten aus der Datenbank in HTML-Vorlagen ersetzte und an den Client sendete.

Dieser Ansatz wurde durch JavaScript-Frameworks ersetzt, die in den letzten Jahren durch die heilige Dreifaltigkeit des React Angular Vue- Webs dargestellt werden. Amen . Was war der grundlegende Unterschied? Die Geschwindigkeit und ReaktionsfĂ€higkeit der BenutzeroberflĂ€che, da jetzt die gesamte Logik der Site auf dem Client lag und Sie fĂŒr jede Bewegung mit der Maus schöne Animationen mit sich Ă€ndernden Inhalten aufrufen und Anforderungen an die API senden können.

Was weiter? JAM bietet:
- Kein serverseitiges Rendern, und entfernen Sie den Server selbst
- Kein clientseitiges Rendering mit
<div id=ârootâ></div>
- Kompilieren Sie die Site zum Zeitpunkt der InhaltsÀnderung einmal in regulÀren HTML-Code
- Site-Hosting auf jedem Datei-Hosting

Der Kunde erhĂ€lt immer eine vorgerenderte Seite mit einem vollstĂ€ndig gĂŒltigen Layout, und die Frage der Leistung betrifft nur noch die Geschwindigkeit der Internetverbindung (aber vergessen Sie natĂŒrlich nicht den Direktheitskoeffizienten der HĂ€nde der Entwickler).
Toolkit
JAM ist nur ein Ansatz, fĂŒr den es bereits genĂŒgend Mittel auf dem Markt gibt, aber wie Sie wissen, können NĂ€gel mit allem gehĂ€mmert werden, aber ich bevorzuge einen Hammer.

Liste der besten Tools fĂŒr 2019:
Gatsby ist ein statischer Site-Generator aus React + GraphQL- Anwendungen. Warum es so eine Wahl ist und nicht Angular oder Vue, fĂ€llt mir schwer zu beantworten, aber höchstwahrscheinlich liegt der Punkt in der bösen Statistik, die besagt, dass React trotz aller Streitigkeiten der beliebteste Rahmen der letzten drei Jahre ist (werfen Sie in den Kommentaren fĂŒr diese Aussage keine Steine ââauf mich). hat mich tatsĂ€chlich bezahlt). FĂŒr eine visuellere Darstellung kompiliert create-react-app
den Code in einem JavaScript-Build. Zum weiteren Rendern beim Start der Seite generiert Gatsby vollwertige HTML-Seiten mit gĂŒltigem Layout, die auch bei deaktiviertem JS so angezeigt werden, wie sie sind.
Contentful - Content Management System auf statischen Seiten. Dies ist WordPress , das die Beziehung zwischen Vorlagen und Daten in der Datenbank nicht beibehÀlt, sondern die Daten direkt in HTML-Dateien Àndert.
Netlify ist ein sehr benutzerfreundliches Bereitstellungssystem, mit dem Sie die gÀngigsten Datei-Hosting-Dienste mit einer JAM-Anwendung und sogar mit dem HTTPS-Protokoll verbinden können.
Von der Theorie zur Praxis
Nachdem Sie sich fĂŒr die Tools entschieden haben, können Sie fortfahren.
Zufrieden
Wir erstellen ein Konto und stellen fest, dass der Dienst standardmĂ€Ăig ein Modellprojekt generiert, das ich sofort löschen möchte, da es meiner subjektiven Meinung nach eher im Weg steht, als es herauszufinden. Wir erstellen ein neues kostenloses Projekt, ohne Beispiele zu generieren.
Das Content-Management-System basiert auf zwei EntitĂ€ten - dem Content-Modell , das die Struktur und die Datentypen beschreibt, und dem Content selbst . Erstellen Sie zunĂ€chst ein einfaches Modell fĂŒr unseren Blog. Das Inhaltsmodell besteht aus Datentypen, z. B. fĂŒr ein Blog. Die Datentypen sind: Artikel , Person .

NatĂŒrlich können Sie eine beliebige Abstraktionsebene auswĂ€hlen. Sie können beispielsweise Person entfernen und Informationen zum Autor in Article angeben, z. B. Article.author_name
Die Struktur meines Modells article/ âââ title (Short text) âââ text (Long text) âââ banner (Single media) âââ publishedAt (Date & Time) person/ âââ fullName (Short text) âââ avatar (Single media)
FĂŒgen Sie als NĂ€chstes mithilfe der bereits erstellten Datentypen Inhalte hinzu. FĂŒr Texte können Sie SaganIpsum for Unsplash- Bilder verwenden.

Gatsby
Wir öffnen das Terminal und schaffen eine Arbeitsumgebung
## npm install --global gatsby-cli ## gatsby new personal-blog ## Hello World ## gatsby new minimal-gatsby https://github.com/gatsbyjs/gatsby-starter-hello-world ## cd personal-blog
Projektstruktur personal-blog/ âââ gatsby-browser.js âââ gatsby-config.js âââ gatsby-node.js âââ gatsby-ssr.js âââ LICENSE âââ node_modules âââ package.json âââ README.md âââ src âââ components â âââ header.js â âââ image.js â âââ layout.css â âââ layout.js â âââ seo.js âââ images â âââ gatsby-astronaut.png â âââ gatsby-icon.png âââ pages âââ 404.js âââ index.js âââ page-2.js
## hot-reloading gatsby develop
Was ist passiert? Eine React + GraphQL- Anwendung wird mit Gatsby erstellt. Dies bedeutet, dass Sie jedes alte Projekt konvertieren können, dessen Ăbersetzung in eine statische HTML-Site viel Zeit in Anspruch nimmt und die Geschwindigkeit um ein Vielfaches erhöht.
Gatsby + zufrieden
## npm install gatsby-source-contentful dotenv
Erstellen Sie die ENV- Datei im Stammverzeichnis der Anwendung mit den folgenden Inhalten:
/* 12- Contentful â Settings â API keys â Example key 1â Space ID */ CONTENTFUL_SPACE_ID=xxxxxxxxxxxx /* 64- Contentful â Settings â API keys â Example key 1â Content Delivery API - access token */ CONTENTFUL_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Erweitern der Konfiguration in gatsby-config.js :
if (process.env.NODE_ENV === "development") { require("dotenv").config(); } module.exports = { /* other settings */ plugins: [ /* other plugins */ { resolve: `gatsby-source-contentful`, options: { spaceId: process.env.CONTENTFUL_SPACE_ID, accessToken: process.env.CONTENTFUL_ACCESS_TOKEN, }, } ] }
Wir starten den Gatsby-Server neu und wenn die Konsole keine Fehler anzeigt, wurde die Verbindung zu Contentful hergestellt und Sie können fortfahren.
Gatsby + GraphQL + Contentful
Wenn Sie mit GraphQL nicht vertraut sind, machen Sie sich keine Sorgen, da dies recht einfach ist. Unsere Website befindet sich jetzt unter:
http: // localhost: 8000 /
Aber jetzt lassen wir es und öffnen die zweite Registerkarte:
http: // localhost: 8000 / ___ graphql
Vor uns liegt die IDE fĂŒr GraphQL direkt im Browser. Damit ist es sehr bequem, Abfragen zu erstellen und zu testen. Klicken Sie oben rechts auf "Dokumente", um die Seitenleiste mit der Dokumentation zu erweitern. Ăberraschenderweise handelt es sich hierbei nicht um eine GraphQL- Dokumentation, sondern um Ihre API-Dokumentation. Erweitern Sie die Abfrageliste , um alle verfĂŒgbaren Schemas fĂŒr Abfragen mit ihren Datentypen anzuzeigen.
Die Schaltungen, an denen wir interessiert sind, haben ungefÀhr den folgenden Namen:
Inhaltlich YourDataType - eine Instanz
allContentful YourDataType - Instanzliste
Beispiel meiner Daten- contentfulArticle
- contentfulPerson
- allContentfulArticle
- allContentfulPerson
Ăber das linke Feld erstellen wir die richtige Abfrage fĂŒr unsere Daten (versuchen Sie es mit der automatischen VervollstĂ€ndigung, sehr praktisch).
Beispiel fĂŒr die Anforderung einer Instanz vom Typ Person und einer Liste aus Artikel { contentfulPerson { fullName avatar { file { url } } } allContentfulArticle { edges { node { title text { text } banner { file { url } } publishedAt } } } }
Was kann aus der Abfragestruktur festgestellt werden:
- Um die URL fĂŒr die Datei zu erhalten, mĂŒssen Sie zum Pfad
typeName.file.url
- Um Text vom Typ
typeName.typeName
dem Pfad typeName.typeName
- Um eine Liste von Instanzen eines bestimmten Typs zu erhalten, mĂŒssen Sie den folgenden Pfad
allContentfulName.edges
Wir ĂŒbertragen das Anforderungsschema auf das Projekt und rendern es wie normale Daten in einer React-Anwendung. Es wird allgemein <StaticQuery />
die <StaticQuery />
-Komponente aus dem Gatsby- Paket zu verwenden, das bereits im Projekt installiert ist.
Beispieldatei index.js import React from "react" import { StaticQuery, graphql } from "gatsby" import Layout from "../components/layout" import Article from "../components/article" const IndexPage = () => ( <Layout> <StaticQuery query={graphql` { allContentfulArticle { edges { node { id title text { text } banner { file { url } } publishedAt } } } } `} render={({ allContentfulArticle: { edges } }) => ( edges.map(({ node }) => ( <Article key={node.id} content={node} /> )) )} /> </Layout> ) export default IndexPage
Wie funktioniert es Das graphQL- query
wird an die Abfrage ĂŒbergeben und unser bevorzugtes JSX zum render
. Verwenden Sie die Destrukturierung, um den Code besser lesbar zu machen.
Restrukturierung am Beispiel von components / article.js import React from "react" const Article = ({ content: { title, text, banner: { file: { url } }, publishedAt } }) => ( <div> <h2>{title}</h2> <img src={url} alt={title}/> <p> {text} </p> <h5>{publishedAt}</h5> </div> ) export default Article
Nachdem klar geworden ist, wie die Daten abgerufen und gerendert werden, können Sie mit der Entwicklung beginnen. Da es in diesem Artikel jedoch nicht darum geht, wie eine Site auf eine Reaktion reagiert, werden wir diesen Moment weglassen und uns vorstellen, dass die Site bereit ist.
Wir werden unser Projekt auf GitHub veröffentlichen, von wo aus es im nÀchsten Schritt bereitgestellt werden kann.
FĂŒr diejenigen, die noch nicht wissen, wie es geht ## git init ## git add . git commit -m âinitial commitâ ## GitHub git remote add origin git@github.com:yourname/my-repository-name.git ## git push origin master
Konfigurieren Sie Netlify
Wir erstellen ein Konto mit dem Service, auf dem Sie Projekte platzieren möchten. Ich habe mich fĂŒr GitHub entschieden. Nach erfolgreicher Autorisierung konfigurieren wir ein neues Projekt. Klicken Sie auf Neue Site von Git . Wir verbinden unser Repository und Netlify stellt automatisch fest, dass es sich um ein Gatsby- Projekt handelt, und konfiguriert alle Skripte fĂŒr die Assembly.
Wir wĂ€hlen den gewĂŒnschten Zweig aus und vergessen die Umgebungsvariablen nicht. Ăffnen Sie dazu das MenĂŒ Erweiterte Einstellungen, fĂŒgen Sie den Inhalt der lokalen ENV- Datei hinzu und bestĂ€tigen Sie die Einstellungen.
Ein paar Minuten Magie und ein Ort an Ort und Stelle:
https://tender-liskov-ce3ad0.netlify.com
Es bleibt ein Hook hinzuzufĂŒgen, um den Inhalt zu aktualisieren. Gehen Sie zu den Einstellungen:
Stellen Sie Einstellungen bereit â Build-Hooks â Build-Hook hinzufĂŒgen

Wir setzen einen beliebigen Anzeigenamen , zum Beispiel "Contentful Hook" , wÀhlen den Zweig aus, mit dem wir erstellen und bestÀtigen möchten . Das Ergebnis ist ein Link, kopieren Sie und gehen Sie zum Inhaltsbereich :
Einstellungen â Webhooks

Wir suchen nach einer Vorlage fĂŒr Netlify auf der rechten Seite und verbinden die beiden Systeme mit zwei Klicks. Wir versuchen, den Inhalt zu Ă€ndern und zu sehen, wie neue Daten auf der Website angezeigt werden.
Insgesamt
JAM-Stack kombiniert die Lösung der Probleme frĂŒherer AnsĂ€tze und scheint vorzugeben, Macht und weltweite PopularitĂ€t zu ergreifen. Aber ist dies eine Revolution? Es gibt nichts Neues und Besonderes, aber dies ist die fortschrittlichste Methode der letzten zwei Jahre, dort, in einem fremden Land und bei uns? Wir haben gerade damit begonnen, Projekte von WordPress auf React zu ĂŒbertragen, und dies ist definitiv ein Fortschritt. Sollten wir jedoch entschlossenere Schritte unternehmen, um nicht wie das legendĂ€re indische Outsourcing zurĂŒckgelassen zu werden?
Link zum Repository mit dem Projekt