Site icon Blog ARC Optimizer

Comprendre le développement de plugins dans Gatsby


Gatsby est un générateur de sites statiques moderne qui a remanié la façon dont les sites Web statiques sont construits. Il intègre React, Node.js et GraphQL pour créer des sites Web époustouflants et ultra-rapides. Dans cet article, nous discuterons des plugins Gatsby et développerons notre propre plugin de commentaire.

Gatsby est un générateur de site statique basé sur React qui a révisé la façon dont les sites Web et les blogs sont créés. Il prend en charge l'utilisation de plugins pour créer des fonctionnalités personnalisées qui ne sont pas disponibles dans l'installation standard.

Dans cet article, je vais présenter les plugins Gatsby, discuter des types de plugins Gatsby qui existent, différencier les formes de plugins Gatsby et , enfin, créez un plugin de commentaires qui peut être utilisé sur n'importe quel site Web Gatsby, dont nous installerons à la fin du didacticiel.

Qu'est-ce qu'un plugin Gatsby?

Gatsby en tant que statique- générateur de site, a des limites sur ce qu'il peut faire . Les plugins sont des moyens d'étendre Gatsby avec toute fonctionnalité non fournie hors de la boîte. Nous pouvons réaliser des tâches telles que la création d'un fichier manifest.json pour une application Web progressive (PWA), l'intégration de tweets sur une page, la journalisation des pages vues, et bien plus encore sur un site Web Gatsby à l'aide de plugins.

Types Des plugins Gatsby

Il existe deux types de plugins Gatsby, locaux et externes. Les plugins locaux sont développés dans un répertoire de projet Gatsby, sous le répertoire / plugins . Les plugins externes sont ceux disponibles via npm ou Yarn. De plus, ils peuvent être sur le même ordinateur mais liés à l'aide de la commande yarn link ou npm link dans un projet de site Web Gatsby.

Formes de plug-ins Gatsby

Des plug-ins existent également sous trois formes principales et sont définies par leurs cas d'utilisation:

Composants d'un plug-in Gatsby

Pour créer un plug-in Gatsby, nous devons définir quelques fichiers:

  • gatsby-node.js
    Rend cela possible pour écouter les processus de construction de Gatsby.
  • gatsby-config.js
    Principalement utilisé pour la configuration et l'installation.
  • gatsby-browser.js
    Permet aux plugins d'exécuter du code pendant l'un des processus de Gatsby dans
  • gatsby-ssr.js
    Personnalise et ajoute des fonctionnalités au processus de rendu côté serveur (SSR).

Ces fichiers sont appelés fichiers API dans la documentation de Gatsby et doivent vivre à la racine de le répertoire d'un plugin, local ou externe.

Tous ces fichiers ne sont pas requis pour créer un Gatsby brancher. Dans notre cas, nous n'implémenterons que les fichiers API gatsby-node.js et gatsby-config.js .

Pour apprendre à développer un plug-in Gatsby, nous allons: créer un plugin de commentaires qui peut être installé sur n'importe quel blog fonctionnant sur Gatsby. Le code complet du plugin est sur GitHub .

Traitement et chargement des commentaires

Pour diffuser des commentaires sur un site Web, nous devons fournir un serveur qui permet d'enregistrer et de charger des commentaires. Nous utiliserons à cet effet un serveur de commentaires déjà disponible sur gatsbyjs-comment-server.herokuapp.com .

Le serveur prend en charge une demande GET / comments de chargement de commentaires. POST / comments enregistrerait les commentaires pour le site Web, et il accepte les champs suivants comme corps de la demande POST / comments :

  • contenu: [string]
    Le commentaire lui-même,
  • auteur: [string]
    Le nom de l'auteur du commentaire,
  • site Web
    Le site Web d'où provient le commentaire,
  • slug
    Le slug de la page à laquelle le commentaire est destiné

Intégration du serveur avec Gatsby à l'aide de fichiers API

Tout comme nous le faisons lorsque crée un blog Gatsby pour créer un plugin externe, nous devons commencer par plugin passe-partout .

Initialisation du dossier

Dans l'interface de ligne de commande (CLI) et à partir de n'importe quel répertoire qui vous convient, exécutons la commande suivante:

 gatsby new gatsby-source-comment-server https: // github .com / Gatsbyjs / gatsby-starter-plugin 

Ensuite, accédez au répertoire du plugin et ouvrez-le dans un éditeur de code. [19659040] Installation d'axios pour les requêtes réseau

Pour commencer, nous allons installer le package axios pour envoyer des requêtes Web au serveur de commentaires:

 npm install axios --save
// ou
yarn add axios 
Ajout d'un nouveau type de nœud

Avant d'extraire des commentaires du serveur de commentaires, nous devons définir un nouveau type de nœud que les commentaires étendront. Pour cela, dans le dossier du plugin, notre fichier gatsby-node.js doit contenir le code ci-dessous:

 exports.sourceNodes = async ({actions}) => {
  const {createTypes} = actions;
  const typeDefs = `
    type CommentServer implémente Node {
      _id: String
      auteur: String
      chaîne: chaîne
      contenu: String
      site web: String
      slug: String
      createdAt: Date
      mis à jourA: Date
    }
  "
  createTypes (typeDefs);
}; 

Premièrement, nous avons extrait des actions des API fournies par Gatsby. Ensuite, nous avons retiré l'action createTypes après quoi nous avons défini un type CommentServer qui étend Node.js. Ensuite, nous avons appelé createTypes avec le nouveau type de nœud que nous avons défini.

Maintenant, nous pouvons utiliser des axios pour extraire des commentaires, puis les stocker dans la couche d'accès aux données en tant que CommentServer ] type. Cette action est appelée «sourçage de nœuds» dans Gatsby.

Pour rechercher de nouveaux nœuds, nous devons implémenter l'API sourceNodes dans gatsby-node.js . Dans notre cas, nous utiliserions axios pour effectuer des requêtes réseau, puis analyserions les données de l'API pour correspondre à un type GraphQL que nous définirions, puis créerions un nœud dans la couche GraphQL de Gatsby en utilisant le [19659047] action createNode .

Nous pouvons ajouter le code ci-dessous au fichier API gatsby-node.js du plugin, créant la fonctionnalité que nous avons décrite:

 const axios = require ( "axios");

exports.sourceNodes = async (
  {actions, createNodeId, createContentDigest},
  pluginOptions
) => {
  const {createTypes} = actions;
  const typeDefs = `
    type CommentServer implémente Node {
      _id: String
      auteur: String
      chaîne: chaîne
      site web: String
      contenu: String
      slug: String
      createdAt: Date
      mis à jourA: Date
    }
  "
  createTypes (typeDefs);

  const {createNode} = actions;
  const {limit, website} = pluginOptions;
  const _website = site Web || "";

  résultat const = attendre axios ({
    url: `https://Gatsbyjs-comment-server.herokuapp.com/comments?limit=$ {_limit} & website = $ {_website} ',
  });

  const comments = result.data;

  fonction convertCommentToNode (commentaire, {createContentDigest, createNode}) {
    const nodeContent = JSON.stringify (commentaire);

    const nodeMeta = {
      id: createNodeId (`commentaires - $ {comment._id}`),
      parent: null,
      enfants: [],
      interne: {
        tapez: `CommentServer`,
        mediaType: `text / html`,
        contenu: nodeContent,
        contentDigest: createContentDigest (commentaire),
      },
    };

    const node = Object.assign ({}, comment, nodeMeta);
    createNode (nœud);
  }

  pour (soit i = 0; i <comments.data.length; i ++) {
    const comment = comments.data [i];
    convertCommentToNode (commentaire, {createNode, createContentDigest});
  }
}; 

Ici, nous avons importé le package axios, puis défini les valeurs par défaut au cas où les options de notre plugin ne sont pas fournies, puis fait une demande au point de terminaison qui sert nos commentaires.

Nous avons ensuite défini une fonction pour convertir le commentaires dans les nœuds Gatsby, en utilisant les assistants d'action fournis par Gatsby. Après cela, nous avons parcouru les commentaires récupérés et appelé convertCommentToNode pour convertir les commentaires en nœuds Gatsby .

Ensuite, nous devons résoudre les commentaires en messages. Gatsby possède une API pour celle appelée createResolvers . Nous pouvons rendre cela possible en ajoutant le code ci-dessous dans le fichier gatsby-node.js du plugin:

 exports.createResolvers = ({createResolvers}) => {
  résolveurs const = {
    MarkdownRemark: {
      commentaires: {
        type: ["CommentServer"],
        résoudre (source, arguments, contexte, info) {
          return context.nodeModel.runQuery ({
            requete: {
              filtre: {
                slug: {eq: source.fields.slug},
              },
            },
            tapez: "CommentServer",
            firstOnly: false,
          });
        },
      },
    },
  };
  createResolvers (résolveurs);
}; 

Ici, nous étendons MarkdownRemark pour inclure un champ de commentaires . Le nouveau champ commentaires sera résolu en type CommentServer en fonction du slug avec lequel le commentaire a été enregistré et du slug de la publication.

Code final pour l'approvisionnement des commentaires et Transformation

Le code final du fichier gatsby-node.js de notre plugin de commentaires devrait ressembler à ceci:

 const axios = require ("axios");

exports.sourceNodes = async (
  {actions, createNodeId, createContentDigest},
  pluginOptions
) => {
  const {createTypes} = actions;
  const typeDefs = `
    type CommentServer implémente Node {
      _id: String
      auteur: String
      chaîne: chaîne
      site web: String
      contenu: String
      slug: String
      createdAt: Date
      mis à jourA: Date
    }
  "
  createTypes (typeDefs);

  const {createNode} = actions;
  const {limit, website} = pluginOptions;
  const _limit = parseInt (limite || 10000); // RECUPERER TOUS LES COMMENTAIRES
  const _website = site Web || "";

  résultat const = attendre axios ({
    url: `https://Gatsbyjs-comment-server.herokuapp.com/comments?limit=$ {_limit} & website = $ {_website} ',
  });

  const comments = result.data;

  fonction convertCommentToNode (commentaire, {createContentDigest, createNode}) {
    const nodeContent = JSON.stringify (commentaire);

    const nodeMeta = {
      id: createNodeId (`commentaires - $ {comment._id}`),
      parent: null,
      enfants: [],
      interne: {
        tapez: `CommentServer`,
        mediaType: `text / html`,
        contenu: nodeContent,
        contentDigest: createContentDigest (commentaire),
      },
    };

    const node = Object.assign ({}, comment, nodeMeta);
    createNode (nœud);
  }

  pour (soit i = 0; i  {
  résolveurs const = {
    MarkdownRemark: {
      commentaires: {
        type: ["CommentServer"],
        résoudre (source, arguments, contexte, info) {
          return context.nodeModel.runQuery ({
            requete: {
              filtre: {
                site Web: {eq: source.fields.slug},
              },
            },
            tapez: "CommentServer",
            firstOnly: false,
          });
        },
      },
    },
  };
  createResolvers (résolveurs);
}; 

Nous devons enregistrer les commentaires des slugs de page dans leurs fichiers JSON respectifs. Cela permet de récupérer les commentaires à la demande via HTTP sans avoir à utiliser une requête GraphQL.

Pour ce faire, nous implémenterons l'API createPageStatefully dans l'API gatsby-node.js Fichier API du plugin. Nous utiliserons le module fs pour vérifier si le chemin existe avant d'y créer un fichier. Le code ci-dessous montre comment nous pouvons implémenter ceci:

 import fs from "fs"
importer {résoudre: pathResolve} à partir de "path"
exports.createPagesStatefully = async ({graphql}) => {
  const commentaires = attendre graphql (
    "
      {
        allCommentServer (limite: 1000) {
          bords {
            nœud {
              Nom
              limace
              _id
              créé à
              contenu
            }
          }
        }
      }
    "
  )

  if (comments.errors) {
    jeter des commentaires.erreurs
  }

  const markdownPosts = attendre graphql (
    "
      {
        allMarkdownRemark (
          trier: {champs: [frontmatter___date]ordre: DESC}
          limite: 1000
        ) {
          bords {
            nœud {
              des champs {
                limace
              }
            }
          }
        }
      }
    "
  )

  const posts = markdownPosts.data.allMarkdownRemark.edges
  const _comments = comments.data.allCommentServer.edges

  const commentsPublicPath = pathResolve (process.cwd (), "public / comments")

  var existe = fs.existsSync (commentsPublicPath) // crée le répertoire de destination s'il n'existe pas

  si (! existe) {
    fs.mkdirSync (commentsPublicPath)
  }

  posts.forEach ((publication, index) => {
    const path = post.node.fields.slug
    const commentsForPost = _comments
      .filter (comment => {
        retour comment.node.slug === chemin
      })
      .map (comment => comment.node)

    const strippedPath = chemin
      .Divisé("/")
      .filtre (s => s)
      .joindre("/")
    const _commentPath = pathResolve (
      process.cwd (),
      "public / commentaires",
      `$ {strippedPath} .json`
    )
    fs.writeFileSync (_commentPath, JSON.stringify (commentsForPost))
  })
} 

Premièrement, nous avons besoin des fs et pour résoudre la fonction du module de chemin . Nous utilisons ensuite l'assistant GraphQL pour extraire les commentaires que nous avons stockés précédemment, afin d'éviter des requêtes HTTP supplémentaires. Nous supprimons les fichiers Markdown que nous avons créés à l'aide de l'assistant GraphQL. Nous vérifions ensuite si le chemin du commentaire ne manque pas dans le chemin public, afin de pouvoir le créer avant de continuer.

Enfin, nous parcourons tous les nœuds du type Markdown. Nous extrayons les commentaires des messages actuels et les stockons dans le répertoire public / comments avec le slug du message comme nom du fichier.

Le .gitignore dans le répertoire root dans un site Web Gatsby empêche le chemin public d'être engagé. L'enregistrement des fichiers dans ce répertoire est sûr.

Lors de chaque reconstruction, Gatsby appelait cette API dans notre plugin pour récupérer les commentaires et les enregistrer localement dans des fichiers JSON.

Pour afficher des commentaires dans le navigateur, nous devons utiliser le gatsby-browser.js Fichier API.

Définir le conteneur racine pour HTML

Pour que le plug-in identifie un point d'insertion dans une page, nous devons définir un élément HTML comme conteneur pour le rendu et la liste des composants du plugin. Nous pouvons nous attendre à ce que chaque page qui en a besoin ait un élément HTML avec un ID défini sur commentContainer .

Implémentez l'API Route Update dans le fichier gatsby-browser.js

Le meilleur moment pour faire l'extraction de fichiers et l'insertion de composants, c'est quand une page vient d'être visitée. L'API onRouteUpdate fournit cette fonctionnalité et transmet les apiHelpers et pluginOpions comme arguments à la fonction de rappel.

 exports.onRouteUpdate = async (apiHelpers, pluginOptions) => {
  const {location, prevLocation} = apiHelpers
} 
Créer un assistant qui crée des éléments HTML

Pour rendre notre code plus propre, nous devons définir une fonction qui peut créer un élément HTML, définir son className et ajouter du contenu. En haut du fichier gatsby-browser.js nous pouvons ajouter le code ci-dessous:

 // Crée un élément, set class. innerhtml le renvoie ensuite.
 fonction createEl (nom, nomClasse, html = null) {
  const el = document.createElement (nom)
  el.className = className
  el.innerHTML = html
  retour el
} 

À ce stade, nous pouvons ajouter un en-tête au point d'insertion des composants de commentaires, dans l'API du navigateur onRouteUpdate . Tout d'abord, nous nous assurerions que l'élément existe dans la page, puis créerions un élément à l'aide de l'aide createEl puis l'ajouterions au point d'insertion.

 // ...

exports.onRouteUpdate = async ({location, prevLocation}, pluginOptions) => {
  const commentContainer = document.getElementById ("commentContainer")
  if (commentContainer && location.path! == "/") {
    en-tête const = createEl ("h2")
    header.innerHTML = "Commentaires"
    commentContainer.appendChild (en-tête)
  }
} 

Pour répertorier les commentaires, nous ajouterions un élément ul au point d'insertion du composant. Nous allons utiliser l'aide createEl pour y parvenir et définir sa className sur comment-list :

 exports.onRouteUpdate = async ({location, prevLocation }, pluginOptions) => {
  const commentContainer = document.getElementById ("commentContainer")
  if (commentContainer && location.path! == "/") {
    en-tête const = createEl ("h2")
    header.innerHTML = "Commentaires"
    commentContainer.appendChild (en-tête)
    const commentListUl = createEl ("ul")
    commentListUl.className = "liste de commentaires"
    commentContainer.appendChild (commentListUl)
} 

Ensuite, nous devons rendre les commentaires que nous avons enregistrés dans le répertoire public en un élément ul à l'intérieur des éléments li . Pour cela, nous définissons un assistant qui récupère les commentaires d'une page en utilisant le nom du chemin.

 // Autres helpers
const getCommentsForPage = async slug => {
  const path = slug
    .Divisé("/")
    .filtre (s => s)
    .joindre("/")
  const data = wait fetch (`/ comments / $ {path} .json`)
  renvoyer data.json ()
}
// ... implémente routeupdate ci-dessous 

Nous avons défini un assistant, nommé getCommentsForPage qui accepte les chemins et utilise fetch pour charger les commentaires du public / commentaires avant de les analyser en JSON et de les renvoyer à la fonction appelante.

Maintenant, dans notre rappel onRouteUpdate nous chargerons les commentaires:

 // ... helpers
exports.onRouteUpdate = async ({location, prevLocation}, pluginOptions) => {
  const commentContainer = document.getElementById ("commentContainer")
  if (commentContainer && location.path! == "/") {
    // ... insère un en-tête
    const commentListUl = createEl ("ul")
    commentListUl.className = "liste de commentaires"
    commentContainer.appendChild (commentListUl)
   const comments = wait getCommentsForPage (location.pathname)
} 

Ensuite, définissons un assistant pour créer les éléments de la liste:

 // .... autres helpers

const getCommentListItem = comment => {
  const li = createEl ("li")
  li.className = "élément de liste de commentaires"

  const nameCont = createEl ("div")
  const name = createEl ("strong", "comment-author", comment.name)
  const date = createEl (
    "envergure",
    "date-commentaire",
    nouvelle date (comment.createdAt) .toLocaleDateString ()
  )
  // date.className = "date"
  nameCont.append (nom)
  nameCont.append (date)

  const commentCont = createEl ("div", "comment-cont", comment.content)

  li.append (nameCont)
  li.append (commentCont)
  retourner li
}

// ... onRouteUpdateImplementation 

Dans l'extrait ci-dessus, nous avons créé un élément li avec un className de comment-list-item et un div pour l'auteur et l'heure du commentaire. Nous avons ensuite créé une autre div pour le texte du commentaire, avec un className de comment-cont .

Pour afficher la liste des commentaires, nous parcourons les commentaires récupérés à l'aide de l'aide getComments puis appelez l'aide getCommentListItem pour créer un élément de liste. Enfin, nous l'ajoutons à l'élément

    :

     // ... helpers
    exports.onRouteUpdate = async ({location, prevLocation}, pluginOptions) => {
      const commentContainer = document.getElementById ("commentContainer")
      if (commentContainer && location.path! == "/") {
        // ... insère un en-tête
        const commentListUl = createEl ("ul")
        commentListUl.className = "liste de commentaires"
        commentContainer.appendChild (commentListUl)
       const comments = wait getCommentsForPage (location.pathname)
        if (comments && comments.length) {
          comments.map (comment => {
            const html = getCommentListItem (commentaire)
            commentListUl.append (html)
            retourner le commentaire
          })
        }
    } 

    Pour permettre aux utilisateurs de publier un commentaire, nous devons faire une demande POST au point de terminaison / comments de l'API. Nous avons besoin d'un formulaire pour créer ce formulaire. Créons un assistant de formulaire qui renvoie un élément de formulaire HTML.

     // ... autres aides
    const createCommentForm = () => {
      const form = createEl ("formulaire")
      form.className = "formulaire-commentaire"
      const nameInput = createEl ("entrée", "nom-entrée", null)
      nameInput.type = "text"
      nameInput.placeholder = "Votre nom"
      form.appendChild (nameInput)
      const commentInput = createEl ("zone de texte", "entrée de commentaire", null)
      commentInput.placeholder = "Commentaire"
      form.appendChild (commentInput)
      const feedback = createEl ("span", "feedback")
      form.appendChild (commentaires)
      const button = createEl ("button", "comment-btn", "Submit")
      button.type = "soumettre"
      form.appendChild (bouton)
      formulaire de retour
    } 

    L'assistant crée un élément d'entrée avec un className de nom-entrée une zone de texte avec un className de ] comment-input un span avec un className de feedback et un bouton avec un className de comment-btn .

    Nous pouvons maintenant ajouter le formulaire au point d'insertion, à l'aide de createCommentForm helper:

     // ... helpers
    exports.onRouteUpdate = async ({location, prevLocation}, pluginOptions) => {
      const commentContainer = document.getElementById ("commentContainer")
      if (commentContainer && location.path! == "/") {
        // insérer un en-tête
        // insérer une liste de commentaires
        commentContainer.appendChild (createCommentForm ())
      }
    } 

    Pour publier un commentaire sur le serveur, nous devons dire à l'utilisateur ce qui se passe – par exemple, qu'une entrée est requise ou que l'API a renvoyé une erreur. L'élément est destiné à cela. Pour faciliter la mise à jour de cet élément, nous créons un assistant qui définit l'élément et insère une nouvelle classe en fonction du type de feedback (que ce soit une erreur, une info ou un succès).

     // ... autres helpers
    // Définit la classe et le texte de la rétroaction du formulaire
    const updateFeedback = (str = "", className) => {
      const feedback = document.querySelector (". feedback")
      feedback.className = `feedback $ {className? className: ""} `.trim ()
      feedback.innerHTML = str
      retour de commentaires
    }
    // callback onRouteUpdate 

    Nous utilisons l'API querySelector pour obtenir l'élément. Ensuite, nous définissons la classe en mettant à jour l'attribut className de l'élément. Enfin, nous utilisons innerHTML pour mettre à jour le contenu de l'élément avant de le renvoyer.

    Nous écouterons l'événement onSubmit du formulaire de commentaire pour déterminer quand un utilisateur a décidé de soumettre le formulaire. Nous ne voulons pas que des données vides soient soumises, nous allons donc définir un message de rétroaction et désactiver le bouton de soumission jusqu'à ce que vous en ayez besoin:

     exports.onRouteUpdate = async ({location, prevLocation}, pluginOptions) => {
      // Ajoute un en-tête
      // Ajoute la liste des commentaires
      // Ajoute un formulaire de commentaire
      document
        .querySelector ("body .comment-form")
        .addEventListener ("soumettre", fonction asynchrone (événement) {
          event.preventDefault ()
          updateFeedback ()
          const nom = document.querySelector (". nom-entrée"). valeur
          const comment = document.querySelector (". comment-input"). value
          si (! nom) {
            return updateFeedback ("Le nom est requis")
          }
          si (! commentaire) {
            return updateFeedback ("Un commentaire est requis")
          }
          updateFeedback ("Enregistrement du commentaire", "info")
          const btn = document.querySelector (". comment-btn")
          btn.disabled = true
          const data = {
            Nom,
            contenu: commentaire,
            slug: location.pathname,
            site web: pluginOptions.website,
          }
    
          récupérer (
            "https://cors-anywhere.herokuapp.com/gatsbyjs-comment-server.herokuapp.com/comments",
            {
              corps: JSON.stringify (données),
              méthode: "POST",
              en-têtes: {
                Accepter: "application / json",
                "Content-Type": "application / json",
              },
            }
          ) .then (fonction asynchrone (résultat) {
            const json = attendre result.json ()
            btn.disabled = false
    
            if (! result.ok) {
              updateFeedback (json.error.msg, "erreur")
            } autre {
              document.querySelector (". nom-entrée"). value = ""
              document.querySelector (". comment-input"). value = ""
              updateFeedback ("Le commentaire a été enregistré!", "succès")
            }
          }). catch (async err => {
            const errorText = attendre err.text ()
            updateFeedback (errorText, "error")
          })
        })
    } 

    Nous utilisons document.querySelector pour obtenir le formulaire à partir de la page, et nous écoutons son événement submit . Ensuite, nous définissons le retour sur une chaîne vide, quelle qu'elle soit avant que l'utilisateur ne tente de soumettre le formulaire.

    Nous vérifions également si le nom ou le champ de commentaire est vide, en définissant un message d'erreur en conséquence.

    Ensuite, nous faisons une demande POST au serveur de commentaires au point de terminaison / comments en écoutant la réponse. Nous utilisons les commentaires pour indiquer à l'utilisateur s'il y a eu une erreur lors de la création du commentaire, et nous les utilisons également pour lui dire si la soumission du commentaire a réussi.

    Ajout d'une feuille de style

    Pour ajouter des styles au composant , nous devons créer un nouveau fichier, style.css à la racine de notre dossier de plugins, avec le contenu suivant:

     #commentContainer {
    }
    
    .comment-form {
      affichage: grille;
    } 

    En haut de gatsby-browser.js importez-le comme ceci:

     import "./style.css"[19659046delalargeurdeleurconteneur

    Enfin, tous les composants de notre plugin de commentaires sont complets. Il est temps d'installer et de tester ce fantastique plugin que nous avons construit.

    Testez le plugin

    Créez un site Web Gatsby

    Exécutez la commande suivante à partir d'un répertoire un niveau au-dessus du répertoire du plugin:

     // PARENT
    // ├── PLUGIN
    // ├── Site Web de Gatsby
    
    gatsby new private-blog https://github.com/gatsbyjs/gatsby-starter-blog[19659125[Installerlepluginlocalementetajouterdesoptions

    Ensuite, passez au répertoire du blog, car nous avons besoin pour créer un lien pour le nouveau plugin:

     cd / path / to / blog
    lien npm ../path/to/plugin/folder[19659129[Ajouteràgatsby-configjs

    Dans le fichier gatsby-config.js du dossier de blog, nous devons ajouter un nouvel objet qui a une clé de résolution et qui a nom-du-dossier-plugin comme valeur de l'installation du plugin. Dans ce cas, le nom est gatsby-comment-server-plugin :

     module.exports = {
      // ...
      plugins: [
        // ...
        "gatsby-plugin-dom-injector",
        {
          resolve: "gatsby-comment-server-plugin",
          options: {website: "https://url-of-website.com"},
        },
      ],
    } 

    Notez que le plug-in accepte une option de site Web pour distinguer la source des commentaires lors de la récupération et de l'enregistrement des commentaires.

    Mettez à jour le composant de blog

    Pour le point d'insertion, nous allons ajoutez

    au composant de modèle de publication à src / templates / blog-post.js du projet de blog. Cela peut être inséré à n'importe quelle position appropriée; J'ai inséré le mien après le dernier élément h et avant le pied de page .
    Démarrer le serveur de développement

    Enfin, nous pouvons démarrer le serveur de développement avec gatsby develop qui rendra notre site Web disponible localement à http: // localhost: 8000 . La navigation vers n'importe quelle page de publication, comme http: // localhost: 8000 / new-beginnings révèlera le commentaire au point d'insertion que nous avons spécifié ci-dessus.

    Nous pouvons créer un commentaire en utilisant le formulaire de commentaire , et il fournira des commentaires utiles lorsque nous interagirons avec lui.

    Pour répertorier les commentaires récemment publiés, nous devons redémarrer le serveur, car notre contenu est statique.

    Conclusion

    Dans ce didacticiel, nous avons introduit Gatsby

    Notre plug-in utilise différentes API de Gatsby et ses propres fichiers API pour fournir des commentaires pour notre site Web, illustrant comment nous pouvons utiliser des plug-ins pour ajouter des fonctionnalités importantes à un site Web Gatsby.

    Bien que nous tirent d'un serveur en direct, le plugin enregistre les commentaires dans des fichiers JSON. Nous pourrions faire le plugin charger des commentaires à la demande du serveur API, mais cela irait à l'encontre de la notion que notre blog est un site Web statique qui ne nécessite pas de contenu dynamique.

    Le plugin intégré dans cet article existe en tant que npm module tandis que le code complet est sur GitHub .

    Références:

    Ressources:

    • Gatsby's blog starter GitHub
      Un référentiel de blog privé disponible pour vous pour créer un site Web Gatsby pour consommer le plug-in.
    • Gatsby Starter Blog Netlify
      Le site Web du blog pour ce didacticiel, déployé sur Netlify pour les tests.
    Quitter la version mobile