Jamstack

Oui, je sais, mais ne sois pas étonné de découvrir un nouveau mot ou une nouvelle façon de faire des sites internet ou applications. Avec la technologie, tout n'est qu'une question de temps.

Hé oui, le temps est venu pour toi de passer au Jamstack !

Pas de panique

3 ingrédients, c'est tout ce qu'il te faut !

J (JavaScript)

A (API)

M (Markup)

Trêve de bavardage, au travail

Nous allons faire notre première recette Jamstack qui sera un Blog sans base de données, juste des fichier texte en format Markdown.

Créé une application Next.js

yarn create next-app blogjam
# or
npx create-next-app blogjam

Rends-toi à la racine de ton projet

cd blogjam
:rotating_light: Attention Next.js active par défaut une télémétrie je vous recommande de le désactivé
npx next telemetry disable

Ajouter webpack pour Markdown

yarn add frontmatter-markdown-loader
# or
npm i -D frontmatter-markdown-loader

Si vous ête sur NextJS v11.0.0 ou supérieur, vous devez ajouter aussi @babel/core et @babel/preset-react

yarn add @babel/core @babel/preset-react
# or
npm i -D @babel/core @babel/preset-react

Configurer Next.js pour webpack loader for Markdown

Éditer le fichier next.config.js qui est dans la racine du projet et apporter les modifications suivantes.

// next.config.js
module.exports = {
  reactStrictMode: true,
+ webpack: (cfg) => {
+   cfg.module.rules.push(
+     {
+       test: /\.md$/,
+       loader: 'frontmatter-markdown-loader',
+       options: { mode: ['react-component'] }
+     }
+   )
+   return cfg;
+ }
}

Mettre à jour le script du package

Ouvrez le fichier package.json ajouté la ligne suivante "export": "npm run build && next export", comme indiqué

"scripts": {
+ "export": "npm run build && next export",
  "dev": "next dev",
  "build": "next build",
  "start": "next start",
  "lint": "next lint"
},

Ajouter du contenu

Crée un nouveau dossier content dans la racine du projet et crée un fichier Markdown content/home.md

mkdir content
touch content/home.md

Ajouter le contenu suivant dans content/home.md

---
title: Hello Jamstack !
date: 2021-09-17T19:31:20.591Z
ingredients:
  - description: JavaScript dans le navigateur comme couche exécutable
    name: JavaScript
  - description: Des API, réutilisables plutôt que des bases de données spécifiques à l'application
    name: API
  - description: Balise pré construit comme mécanisme de livraison
    name: Markup
---
Bienvenue sur mon formidable Blog sur **Jamstack**, pour bien démarrer, il te suffit de 3 ingrédients, c'est tout ce qu'il te faut !

Ajouter un template

Vous avez votre contenu reste plus cas choisir comment l'afficher, nous allons créer un template en remplaçant le contenue de pages/index.js par

import Head from 'next/head'
import styles from '../styles/Home.module.css'
import { attributes, react as HomeContent } from '../content/home.md';

export default function Home() {
  let { title, date, ingredients } = attributes;
  return (
    <div className={styles.container}>
      <Head>
        <title>Hello Jamstack !</title>
        <meta name="description" content="Jamstack, et puis quoi encore !" />
        <link rel="icon" href="/favicon.ico" />
      </Head>

      <main className={styles.main}>
        <h1 className={styles.title}>
          {title}
        </h1>
        
        <HomeContent />

        <ul>
          {ingredients.map((ingredient, index) => (
            <li key={index}>
              <h2>{ingredient.name}</h2>
              <p>{ingredient.description}</p>
            </li>
          ))}
        </ul>
      </main>

      <footer className={styles.footer}>
        Propulsé par toi, en {new Date(date).getFullYear()}
      </footer>
    </div>
  )
}

Démarrer le serveur

Démarre ton serveur local à la racine de ton projet cd blogjam

yarn dev
# or
npm run dev
Hello Jamstack

Et voilà ton blog marche, je te donne rendez-vous au prochain post "Jamstack, et on déploie !" pour la suite de cette aventure "Jamstack, et puis quoi encore !"