
Wie Sie wissen, können Sie mit einigen Boilerplates allein nicht weit kommen. Sie mĂŒssen sich also eingehend mit jeder Technologie befassen, um zu lernen, wie man etwas Wertvolles schreibt. Dieser Artikel beschreibt die Details von Gatsby.js , mit deren Wissen Sie komplexe Websites und Blogs erstellen und pflegen können.
Vorheriger Artikel zum Erstellen und Veröffentlichen eines persönlichen Blogs mit JAM-Stack
Nachfolgend behandelte Themen:
Vorbereitung
Installieren Sie Gatsby auf dem PCyarn global add gatsby-cli
Klonen eines Minimalprojekts npx gatsby new gatsby-tutorial https://github.com/gatsbyjs/gatsby-starter-hello-world cd gatsby-tutorial
Repository-Initialisierung git init git add . git commit -m "init commit"
Gesundheitscheck yarn start
Wenn in der Konsole und im Browser entlang des Pfads http: // localhost: 8000 keine Fehler vorliegen, wird "Hallo Welt!" es bedeutet, dass alles richtig funktioniert. Sie können versuchen, den Inhalt der Datei /src/pages/index.js zu Àndern , um nach Hot-Reload zu suchen .
Seitenstruktur und Routing
Um eine Seite in Gatsby zu erstellen, legen Sie die neue Datei einfach im Ordner / src / pages ab und sie wird in eine separate HTML-Seite kompiliert. Es ist wichtig zu beachten, dass der Pfad zu dieser Seite dem tatsĂ€chlichen Pfad mit dem Namen entspricht . FĂŒgen Sie beispielsweise einige weitere Seiten hinzu:
src âââ pages âââ about.js âââ index.js âââ tutorial âââ part-four.js âââ part-one.js âââ part-three.js âââ part-two.js âââ part-zero.js
Der Inhalt ist noch nicht wichtig, daher kann jeder Text zur Unterscheidung zwischen Seiten verwendet werden.
import React from "react"; export default () => <div>Welcome to tutorial/part-one</div>;
ĂberprĂŒfen Sie im Browser:
Auf diese Weise können Sie beim Strukturieren von Dateien Routingprobleme sofort lösen.
Es gibt auch eine spezielle createPage-API, mit der Sie die Pfade und Namen von Seiten flexibler steuern können. Um damit arbeiten zu können, mĂŒssen Sie jedoch wissen, wie Daten in Gatsby funktionieren. Daher werden wir dies im Artikel etwas weiter betrachten.
Kombinieren Sie die erstellten Seiten mit den Links. Dazu verwenden wir die <Link />
-Komponente aus dem Gatsby-Paket, die speziell fĂŒr die interne Navigation erstellt wurde. Verwenden Sie fĂŒr alle externen Links das regulĂ€re <a>
-Tag.
/src/pages/index.js
import React from "react"; import { Link } from "gatsby"; export default () => ( <div> <ul> <li> <Link to="/about">about</Link> </li> <li> <Link to="/tutorial/part-zero">Part #0</Link> </li> <li> <Link to="/tutorial/part-one">Part #1</Link> </li> <li> <Link to="/tutorial/part-two">Part #2</Link> </li> <li> <Link to="/tutorial/part-three">Part #3</Link> </li> <li> <Link to="/tutorial/part-four">Part #4</Link> </li> </ul> </div> );
<Link>
unter der Haube verfĂŒgt ĂŒber einen sehr kniffligen Mechanismus zur Optimierung des Seitenladens und wird daher anstelle von <a>
zum Navigieren auf der Website verwendet. Weitere Details finden Sie hier .

Es werden Seiten erstellt, Links hinzugefĂŒgt und die Navigation beendet.
Komponenten, Vorlagen und ihre Interaktion
Wie Sie wissen, gibt es in jedem Projekt immer wiederkehrende Elemente. Bei Websites handelt es sich um eine Kopf-, FuĂ- und Navigationsleiste. AuĂerdem werden Seiten unabhĂ€ngig vom Inhalt gemÀà einer bestimmten Struktur erstellt. Da Gatsby ein Compiler fĂŒr React ist, wird zur Lösung dieser Probleme derselbe Komponentenansatz verwendet.
Erstellen Sie die Komponenten fĂŒr die Kopfzeile und das Navigationsfeld:
/src/components/header.js
import React from "react"; import { Link } from "gatsby"; /** * * , React-. * , * " ". * "" GraphQL gatsby- */ import logoSrc from "../images/logo.png"; export default () => ( <header> <Link to="/"> <img src={logoSrc} alt="logo" width="60px" height="60px" /> </Link> That is header </header> );
/src/components/sidebar.js
import React from "react"; import { Link } from "gatsby"; export default () => ( <div> <ul> <li> <Link to="/about">about</Link> </li> <li> <Link to="/tutorial/part-zero">Part #0</Link> </li> <li> <Link to="/tutorial/part-one">Part #1</Link> </li> <li> <Link to="/tutorial/part-two">Part #2</Link> </li> <li> <Link to="/tutorial/part-three">Part #3</Link> </li> <li> <Link to="/tutorial/part-four">Part #4</Link> </li> </ul> </div> );
und fĂŒgen Sie sie zu /src/pages/index.js hinzu
import React from "react"; import Header from "../components/header"; import Sidebar from "../components/sidebar"; export default () => ( <div> <Header /> <Sidebar /> <h1>Index page</h1> </div> );
Wir prĂŒfen:

Alles funktioniert, aber wir mĂŒssen Header und Sidebar auf jeder Seite separat importieren, was nicht sehr praktisch ist. Um dieses Problem zu lösen, reicht es aus, eine Layoutkomponente zu erstellen und jede Seite damit zu versehen.
Gatsby Layout == Container reagieren
Ja, es ist keine strikte Gleichheit, weil es "fast" dasselbe ist
/src/components/layout.js
import React from "react"; import Header from "./header"; import Sidebar from "./sidebar"; export default ({ children }) => ( <> <Header /> <div style={{ margin: `0 auto`, maxWidth: 650, backgroundColor: `#eeeeee` }} > <Sidebar /> {children} </div> </> );
/src/pages/index.js (und alle anderen Seiten)
import React from "react"; import Layout from "../components/layout"; export default () => ( <Layout> <h1>Index page</h1> </Layout> );
Fertig, schauen Sie sich den Browser an:

Warum enthĂ€lt das Projekt alle Dateinamen in Kleinbuchstaben? Lassen Sie uns zunĂ€chst feststellen, dass der Namespace fĂŒr React auf der Tatsache beruht, dass "jede Datei eine Klasse ist und die Klasse immer groĂ geschrieben wird". In Gatsby enthalten Dateien immer noch Klassen, aber es gibt ein "aber" - "jede Datei ist eine potenzielle Seite und ihr Name ist die URL zu dieser Seite". Die Community kam zu dem Schluss, dass Links wie http://domain.com/User/Settings
keine comme-il-faut und genehmigten Kebab-GroĂ- und Kleinschreibung fĂŒr Dateinamen sind.
Dateistruktur src âââ components â âââ header.js â âââ layout.js â âââ sidebar.js âââ images â âââ logo.png âââ pages âââ about.js âââ index.js âââ tutorial âââ part-eight.js âââ part-five.js âââ part-four.js âââ part-one.js âââ part-seven.js âââ part-six.js âââ part-three.js âââ part-two.js âââ part-zero.js
Mit Daten arbeiten
Nachdem die Site-Struktur fertig ist, können Sie mit dem AusfĂŒllen des Inhalts fortfahren. Der klassische "Hardcode" -Ansatz passte nicht zu den Erstellern des JAM-Stacks sowie zum "Rendern von Inhalten aus AJAX-Anforderungen". Daher wurde vorgeschlagen, die Websites zum Zeitpunkt der Kompilierung mit Inhalten zu fĂŒllen. Im Fall von Gatsby ist GraphQL dafĂŒr verantwortlich, sodass Sie bequem mit Datenströmen aus beliebigen Quellen arbeiten können.
Es ist unmöglich, kurz ĂŒber GraphQL zu sprechen, daher ist es ratsam, es selbst zu studieren oder auf meinen nĂ€chsten Artikel zu warten. Weitere Informationen zur Arbeit mit GraphQL finden Sie hier .
Um mit GraphQL zu arbeiten, verfĂŒgt das gatsby
Paket ab der zweiten Version ĂŒber eine gatsby
Komponente, die sowohl auf Seiten als auch in einfachen Komponenten verwendet werden kann. Dies ist der Hauptunterschied zu der VorgÀnger- Seitenabfrage . Bisher ist unsere Site nicht mit Datenquellen verbunden. Versuchen wir also, beispielsweise die Seitenmetadaten anzuzeigen und dann mit komplexeren Dingen fortzufahren.
Um eine query
zu erstellen query
Sie http: // localhost: 8000 / ___ graphql öffnen und die Seitenleiste mit der Dokumentation verwenden, um verfĂŒgbare Daten ĂŒber die Site zu finden. Vergessen Sie nicht die automatische VervollstĂ€ndigung.

/src/components/sidebar.js
import React from "react"; import { Link, StaticQuery, graphql } from "gatsby"; export default () => ( <StaticQuery query={graphql` { allSitePage { edges { node { id path } } } } `} render={({ allSitePage: { edges } }) => ( <ul> {edges.map(({ node: { id, path } }) => ( <li key={id}> <Link to={path}>{id}</Link> </li> ))} </ul> )} /> );
Mithilfe der query
wir jetzt Daten zu Seiten, die wir im Navigationsbereich rendern, und wir mĂŒssen uns keine Sorgen mehr machen, dass der Link nicht mit dem Namen ĂŒbereinstimmt, da alle Daten automatisch erfasst werden.

TatsĂ€chlich sind dies alle Daten, die auf unserer Website ohne Verwendung von Plug-Ins von Drittanbietern und ohne den guten alten "Hardcode" verfĂŒgbar sein können, sodass wir problemlos zum nĂ€chsten Thema unseres Artikels ĂŒbergehen - Plugins.
Plugins
Im Kern ist Gatsby ein Compiler mit einer Reihe von Extras, die Plugins sind. Mit ihnen können Sie die Verarbeitung bestimmter Dateien, Datentypen und verschiedener Formate anpassen.
Erstellen Sie die Datei /gatsby-config.js auf der Stammebene der Anwendung. Das ist fĂŒr die Konfiguration des gesamten Compilers verantwortlich und versucht, das erste Plugin fĂŒr die Arbeit mit Dateien zu konfigurieren:
Plugin Installation:
yarn add gatsby-source-filesystem
Konfiguration in der Datei /gatsby-config.js:
module.exports = { plugins: [ { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images/`, } } ], }
Weitere Details zur obigen Datei /** * gatsby-config.js * JS * */ module.exports = { /** * 'plugins' pipeline * , */ plugins: [ /** * , * */ `gatsby-example-plugin`, { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images/`, } } ], }
Erinnern Sie sich, dass wir ĂŒber den "richtigen" Bildimport in Gatsby gesprochen haben ?
/src/components/header.js
import React from "react"; import { Link, StaticQuery, graphql } from "gatsby"; export default () => ( <StaticQuery query={graphql` { allFile(filter: { name: { eq: "logo" } }) { edges { node { publicURL } } } } `} render={({ allFile: { edges: [ { node: { publicURL } } ] } }) => ( <header> <Link to="/"> <img src={publicURL} alt="logo" width="60px" height="60px" /> </Link> That is header </header> )} /> );
An der Site hat sich nichts geĂ€ndert, aber jetzt wird das Bild mithilfe von GraphQL anstelle eines einfachen Webpack-Imports ersetzt. Auf den ersten Blick mag es scheinen, dass die Designs zu komplex sind und es unnötige Gesten waren, aber lassen Sie uns nicht zu Schlussfolgerungen eilen, da sich die Sache in denselben Plugins befindet. Wenn wir beispielsweise Tausende von Fotos auf der Website veröffentlichen wollten, mussten wir auf jeden Fall darĂŒber nachdenken, das Laden aller Inhalte zu optimieren. Um unseren Lazy-Load-Prozess nicht von Grund auf neu zu erstellen, wĂŒrden wir einfach ein Gatsby-Image- Plugin hinzufĂŒgen, das das Laden aller Fotos optimiert Bilder, die mit query
importiert wurden.
Plugins fĂŒr das Styling installieren:
yarn add gatsby-plugin-typography react-typography typography typography-theme-noriega node-sass gatsby-plugin-sass gatsby-plugin-styled-components styled-components babel-plugin-styled-components
gatsby-config.js
module.exports = { plugins: [ { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images/` } }, // add style plugins below `gatsby-plugin-typography`, `gatsby-plugin-sass`, `gatsby-plugin-styled-components` ] };
Auf der offiziellen Website finden Sie ein Plugin fĂŒr jeden Geschmack.
Anwendungsstyling
Beginnen wir mit der Gestaltung der Anwendung mit verschiedenen AnsĂ€tzen. Im vorherigen Schritt haben wir bereits Plugins fĂŒr die Arbeit mit SASS , Styled-Components und der Bibliothek typography.js installiert. Beachten Sie jedoch, dass css.modules sofort unterstĂŒtzt werden.
Beginnen wir mit den globalen Stilen, die wie andere Dinge, die sich auf die gesamte Site beziehen, in der Datei /gatsby-browser.js konfiguriert werden mĂŒssen:
import "./src/styles/global.scss";
Mehr ĂŒber gatsby-browser.js
/src/styles/global.scss
body { background-color: lavenderblush; }
Aus verschiedenen GrĂŒnden tendieren die Trends der letzten Jahre zum "CSS in JS" -Ansatz, daher sollten Sie globale Stile nicht missbrauchen, und es ist besser, sich darauf zu beschrĂ€nken, die Schriftarten und wiederverwendeten Klassen anzugeben. In diesem speziellen Projekt ist geplant, Typography.js fĂŒr diese Zwecke zu verwenden, damit globale Stile leer bleiben.
Möglicherweise haben Sie nach dem HinzufĂŒgen der gatsby-plugin-typography
zur Konfiguration Ănderungen im Erscheinungsbild der Site gatsby-plugin-typography
Dies liegt daran, dass die Standardvoreinstellung angewendet wurde und wir sie jetzt fĂŒr uns selbst konfigurieren.
/src/utils/typography.js
import Typography from "typography"; import theme from "typography-theme-noriega"; const typography = new Typography(theme); export default typography;
Sie können jede andere Voreinstellung aus der Liste auswĂ€hlen oder mithilfe der Paket-API eine eigene erstellen ( Beispiel fĂŒr die Konfiguration der offiziellen Gatsby-Website).
/gatsby-config.js
module.exports = { plugins: [ { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images/` } }, { resolve: `gatsby-plugin-typography`, options: { pathToConfigModule: `src/utils/typography` } }, `gatsby-plugin-sass`, `gatsby-plugin-styled-components` ] };
AbhĂ€ngig von der ausgewĂ€hlten Voreinstellung wird der globale Stil der Site geĂ€ndert. Entscheiden Sie, wie Sie globale Stile fĂŒr sich selbst festlegen möchten. Aus technischer Sicht sind dies persönliche Vorlieben und Unterschiede. Wir gehen jedoch dazu ĂŒber, Komponenten mit gestylten Komponenten zu gestalten :
FĂŒgen Sie eine Datei mit den globalen Variablen /src/utils/vars.js hinzu
export const colors = { main: `#663399`, second: `#fbfafc`, main50: `rgba(102, 51, 153, 0.5)`, second50: `rgba(251, 250, 252, 0.5)`, textMain: `#000000`, textSecond: `#ffffff`, textBody: `#222222` };
/src/components/header.js import React from "react"; import { Link, StaticQuery, graphql } from "gatsby"; import styled from "styled-components"; import { colors } from "../utils/vars"; const Header = styled.header` width: 100%; height: 3em; display: flex; justify-content: space-between; align-items: center; background-color: ${colors.main}; color: ${colors.textSecond}; padding: 0.5em; `; const Logo = styled.img` border-radius: 50%; height: 100%; `; const logoLink = `height: 100%;`; export default () => ( <StaticQuery query={graphql` { allFile(filter: { name: { eq: "logo" } }) { edges { node { publicURL } } } } `} render={({ allFile: { edges: [ { node: { publicURL } } ] } }) => ( <Header> That is header <Link to="/" css={logoLink}> <Logo src={publicURL} alt="logo" /> </Link> </Header> )} /> );
/src/components/sidebar.js import React from "react" import { Link, StaticQuery, graphql } from "gatsby" import styled from "styled-components" import { colors } from "../utils/vars" const Sidebar = styled.section` position: fixed; left: 0; width: 20%; height: 100%; display: flex; flex-direction: column; justify-content: center; background-color: ${colors.second}; color: ${colors.textMain}; ` const navItem = ` display: flex; align-items: center; margin: 0 1em 0 2em; padding: 0.5em 0; border-bottom: 0.05em solid ${colors.mainHalf}; postion: relative; color: ${colors.textBody}; text-decoration: none; &:before { content: ''; transition: 0.5s; width: 0.5em; height: 0.5em; position: absolute; left: 0.8em; border-radius: 50%; display: block; background-color: ${colors.main}; transform: scale(0); } &:last-child { border-bottom: none; } &:hover { &:before { transform: scale(1); } } ` export default () => ( <StaticQuery query={graphql` { allSitePage { edges { node { id, path } } } } `} render={({ allSitePage: { edges } }) => ( <Sidebar> { edges.map(({ node: { id, path } }) => ( <Link to={path} key={id} css={navItem} >{id}</Link> )) } </Sidebar> )} /> )

Bereits vorhandene Elemente werden stilisiert. Es ist an der Zeit, Inhalte mit Contentful zu verknĂŒpfen , das Rand-Plugin zu verbinden und Seiten mithilfe der createPages-API zu generieren.
Weitere Informationen zum VerknĂŒpfen von Gatsby und Contentful finden Sie in einem frĂŒheren Artikel.
Struktur meiner Daten mit Contentful [ { "id": "title", "type": "Symbol" }, { "id": "content", "type": "Text", }, { "id": "link", "type": "Symbol", }, { "id": "orderNumber", "type": "Integer", } ]
Paketinstallation:
yarn add dotenv gatsby-source-contentful gatsby-transformer-remark
/gatsby-config.js
if (process.env.NODE_ENV === "development") { require("dotenv").config(); } module.exports = { plugins: [ `gatsby-transformer-remark`, { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images/`, } }, { resolve: `gatsby-plugin-typography`, options: { pathToConfigModule: `src/utils/typography`, }, }, { resolve: `gatsby-source-contentful`, options: { spaceId: process.env.CONTENTFUL_SPACE_ID, accessToken: process.env.CONTENTFUL_ACCESS_TOKEN, }, }, `gatsby-plugin-sass`, `gatsby-plugin-styled-components`, ], }
Löschen Sie den Ordner / src / pages mit allen darin enthaltenen Dateien und erstellen Sie eine neue Datei, um die Knoten in Gatsby zu verwalten:
/gatsby-node.js
const path = require(`path`); /** * , * */ exports.createPages = ({ graphql, actions }) => { /** * * * */ const { createPage } = actions; return graphql(` { allContentfulArticle { edges { node { title link content { childMarkdownRemark { html } } } } } } `).then(({ data: { allContentfulArticle: { edges } } }) => { /** * * createPage() * */ edges.forEach(({ node }) => { createPage({ path: node.link, component: path.resolve(`./src/templates/index.js`), context: { slug: node.link } }); }); }); };
Mehr ĂŒber gatsby-node.js
Erstellen Sie eine Vorlagendatei, die als Grundlage fĂŒr die generierten Seiten dient
/src/templates/index.js
import React from "react"; import { graphql } from "gatsby"; import Layout from "../components/layout"; export default ({ data: { allContentfulArticle: { edges: [ { node: { content: { childMarkdownRemark: { html } } } } ] } } }) => { return ( <Layout> <div dangerouslySetInnerHTML={{ __html: html }} /> </Layout> ); }; export const query = graphql` query($slug: String!) { allContentfulArticle(filter: { link: { eq: $slug } }) { edges { node { title link content { childMarkdownRemark { html } } } } } } `;
Warum wird die <StaticQuery />
-Komponente hier nicht verwendet? Die Sache ist, dass es keine Variablen zum Erstellen einer Anfrage unterstĂŒtzt, aber wir mĂŒssen die Variable $slug
aus dem Kontext der Seite verwenden.
Aktualisieren der Logik in der Navigationsleiste import React from "react"; import { Link, StaticQuery, graphql } from "gatsby"; import styled from "styled-components"; import { colors } from "../utils/vars"; const Sidebar = styled.section` position: fixed; left: 0; width: 20%; height: 100%; display: flex; flex-direction: column; justify-content: center; background-color: ${colors.second}; color: ${colors.textMain}; `; const navItem = ` display: flex; align-items: center; margin: 0 1em 0 2em; padding: 0.5em 0; border-bottom: 0.05em solid ${colors.main50}; postion: relative; color: ${colors.textBody}; text-decoration: none; &:before { content: ''; transition: 0.5s; width: 0.5em; height: 0.5em; position: absolute; left: 0.8em; border-radius: 50%; display: block; background-color: ${colors.main}; transform: scale(0); } &:last-child { border-bottom: none; } &:hover { &:before { transform: scale(1); } } `; export default () => ( <StaticQuery query={graphql` { allContentfulArticle(sort: { order: ASC, fields: orderNumber }) { edges { node { title link orderNumber } } } } `} render={({ allContentfulArticle: { edges } }) => ( <Sidebar> {edges.map(({ node: { title, link, orderNumber } }) => ( <Link to={link} key={link} css={navItem}> {orderNumber}. {title} </Link> ))} </Sidebar> )} /> );

SEO-Optimierung
Auf der technischen Seite kann die Site als bereit betrachtet werden. Arbeiten wir also mit ihren Metadaten. Dazu benötigen wir folgende Plugins:
yarn add gatsby-plugin-react-helmet react-helmet
React-Helm generiert <head>...</head>
fĂŒr HTML-Seiten und ist in Verbindung mit Gatsby-Rendering ein leistungsstarkes und praktisches Tool fĂŒr die Arbeit mit SEO.
/src/templates/index.js
import React from "react"; import { graphql } from "gatsby"; import { Helmet } from "react-helmet"; import Layout from "../components/layout"; export default ({ data: { allContentfulArticle: { edges: [ { node: { title, content: { childMarkdownRemark: { html } } } } ] } } }) => { return ( <Layout> <Helmet> <meta charSet="utf-8" /> <title>{title}</title> </Helmet> <div dangerouslySetInnerHTML={{ __html: html }} /> </Layout> ); }; export const query = graphql` query($slug: String!) { allContentfulArticle(filter: { link: { eq: $slug } }) { edges { node { title link content { childMarkdownRemark { html } } } } } } `;
Jetzt stimmt der title
Website immer mit dem Titel des Artikels ĂŒberein, was sich erheblich auf die Ausgabe der Website in den Suchergebnissen speziell fĂŒr dieses Problem auswirkt. Hier können Sie einfach <meta name="description" content=" ">
mit einer Beschreibung jedes Artikels separat hinzufĂŒgen, sodass der Benutzer verstehen kann, worum es in dem Artikel auf der Suchseite geht. Im Allgemeinen sind jetzt alle SEO-Funktionen verfĂŒgbar und verwaltbar ein Ort.

PWA-Setup
Gatsby wurde entwickelt, um sofort erstklassige Leistung zu liefern. Es kĂŒmmert sich um die Probleme der Codetrennung und -minimierung sowie der Optimierung in Form von Vorladen im Hintergrund, Bildverarbeitung usw., sodass die von Ihnen erstellte Site ohne manuelle Konfiguration eine hohe Leistung aufweist. Diese Leistungsmerkmale sind ein wichtiger Bestandteil der UnterstĂŒtzung eines progressiven Webanwendungsansatzes.
Neben all dem gibt es drei grundlegende Kriterien fĂŒr eine Site, die sie als PWA definieren:
Der erste Punkt kann von Gatsby nicht gelöst werden, da die DomĂ€ne , das Hosting und das Protokoll Probleme bei der Bereitstellung und nicht bei der Entwicklung sind. Ich kann jedoch Netlify empfehlen, das das https-Problem standardmĂ€Ăig löst.
Wir gehen zu den restlichen Elementen ĂŒber, dafĂŒr werden wir zwei Plugins installieren:
yarn add gatsby-plugin-manifest gatsby-plugin-offline
und konfigurieren Sie sie /src/gatsby-config.js
if (process.env.NODE_ENV === "development") { require("dotenv").config(); } module.exports = { plugins: [ { resolve: `gatsby-plugin-manifest`, options: { name: `GatsbyJS translated tutorial`, short_name: `GatsbyJS tutorial`, start_url: `/`, background_color: `#f7f0eb`, theme_color: `#a2466c`, display: `standalone`, icon: `public/favicon.ico`, include_favicon: true } }, `gatsby-plugin-offline`, `gatsby-transformer-remark`, { resolve: `gatsby-source-filesystem`, options: { name: `images`, path: `${__dirname}/src/images/` } }, { resolve: `gatsby-plugin-typography`, options: { pathToConfigModule: `src/utils/typography` } }, { resolve: `gatsby-source-contentful`, options: { spaceId: process.env.CONTENTFUL_SPACE_ID, accessToken: process.env.CONTENTFUL_ACCESS_TOKEN } }, `gatsby-plugin-sass`, `gatsby-plugin-styled-components`, `gatsby-plugin-react-helmet` ] };
Sie können Ihr Manifest mithilfe der Dokumentation anpassen sowie die Service-Worker-Strategie anpassen, indem Sie die Plugin-Einstellungen ĂŒberschreiben .
Sie werden keine Ănderungen im Entwicklungsmodus bemerken, aber die Site erfĂŒllt bereits die neuesten Anforderungen der Webwelt, und wenn sie auf der https: // Domain gehostet wird, ist sie nicht gleich.
Fazit
Als ich vor ein paar Jahren zum ersten Mal auf die Probleme stieĂ, React-Anwendungen ins Internet zu stellen, zu unterstĂŒtzen und Inhalte zu aktualisieren, konnte ich mir nicht vorstellen, dass es bereits einen JAM-Stack-Ansatz auf dem Markt gibt, der all diese Prozesse vereinfacht, und jetzt werde ich nicht ĂŒberrascht sein Einfachheit. Gatsby löst die meisten Probleme, die sich auf die Leistung der Website auswirken, sofort. Wenn Sie ein wenig mehr ĂŒber die Feinheiten der Anpassung an Ihre Anforderungen wissen, können Sie 100% -Indikatoren fĂŒr alle Elemente in Lighthouse erhalten , die sich erheblich auf die Ausgabe der Website in Suchmaschinen auswirken (von zumindest bei Google).
Repository mit Projekt