Web Development dengan Framework ReactJS (GatsbyJS) Beserta Contoh Pembuatan Web Modern

March 02, 2024
Muhammad Syukri

Web Modern GatsbyJS

Apa itu Gatsby?

Gatsby adalah kerangka kerja sumber terbuka untuk membangun situs web dan aplikasi modern yang cepat menggunakan React. Ini memungkinkan pengembang untuk membuat situs web statis yang sangat cepat menggunakan React dan memungkinkan integrasi data dari berbagai sumber seperti CMS tanpa kepala, layanan SaaS, API, basis data, sistem file, dan lainnya.

Gatsby menghasilkan halaman HTML statis pada waktu pembangunan, sehingga situs memuat dengan sangat cepat. Ini menggunakan teknik kinerja web modern seperti prefetching sumber daya, pemisahan kode, dan lazy loading, optimasi gambar, dan inlining CSS kritis. Halaman HTML yang dibangun secara statis juga berarti Gatsby pada tahun 2024 memiliki kemampuan SEO yang sangat baik secara otomatis.

Kemampuan GatsbyJS

Gatsby memiliki ekosistem plugin sumber terbuka yang berkembang pesat yang memperluas kemampuannya dan memungkinkan integrasi fungsionalitas tambahan seperti analitik, peta situs, feed, dukungan offline, dan lainnya ke dalam situs Gatsby.

Beberapa kasus penggunaan utama Gatsby termasuk membangun situs web statis seperti situs pemasaran, blog, toko e-commerce, situs dokumentasi, dan halaman utama perusahaan di mana kinerja dan SEO kritis. Pendekatan JAMstack yang dipromosikan oleh Gatsby juga membantu membangun generasi statis yang aman dan dapat diskalakan.

Gatsby menyediakan pengalaman pengembangan web modern menggunakan React dan GraphQL yang menghasilkan situs dengan kinerja, keamanan, dan skalabilitas yang sangat baik, serta pengalaman pengembang yang baik. Ekosistem plugin yang kaya menyediakan banyak opsi untuk memperluas fungsionalitas.

Konsep Kerja GatsbyJS

Kelebihan dan kekurangan Gatsby

Mari jelajahi kelebihan dan kekurangan kerangka kerja rendering server Gatsby. Kelebihan Gatsby Ini menyediakan cara yang cepat, aman, dan dapat diskalakan untuk membangun situs web modern menggunakan React dan GraphQL.

Ini menangani kinerja, SEO, dan integrasi secara otomatis, memungkinkan pengembang untuk fokus pada menciptakan pengalaman yang hebat. Kelebihan tersebut diberikan dalam Tabel 1:

Tabel 1: Kelebihan dan fitur-fitur Gatsby

Kelebihan Deskripsi
Kinerja Sangat Cepat Gatsby membangun halaman HTML statis yang dioptimalkan, menghasilkan waktu muat yang cepat. Memanfaatkan pemisahan kode dan data, lazy loading, CDN, dll.
SEO yang Sangat Baik Kemampuan generasi situs statis menghasilkan struktur yang ramah SEO. Mudah untuk menerapkan teknik SEO canggih.
Berdasarkan React Membangun situs menggunakan komponen dan hook React. Memanfaatkan kemampuan ekosistem React.
GraphQL Data Layer GraphQL menyediakan lapisan data yang terpadu untuk mengintegrasikan berbagai sumber dan mengambil data dengan mudah
Ekosistem Plugin yang Luas Koleksi plugin yang luas untuk fitur-fitur seperti analitik, peta situs, optimisasi, aksesibilitas, dll.
Gambar Responsif Gatsby mengotomatisasi optimasi gambar, pembuatan tag gambar, dan lazy loading untuk gambar responsif.
Pengembangan yang Mudah Situs Gatsby dapat dengan mudah diunggah ke platform seperti Netlify, Vercel, AWS Amplify, dll.
Aplikasi Web Progresif Fitur-fitur PWA seperti dukungan offline, manifes, dan service worker dapat diimplementasikan dengan cepat.
Integrasi CMS Data dapat diambil dengan mulus dari CMS tanpa kepala seperti Contentful, Drupal, dan WordPress.
Pengalaman Pengembang Pemuatan cepat, API, antarmuka GraphQL, dan kerangka kerja React membuat pengembangan lebih mudah.

Kekurangan Gatsby

Meskipun Gatsby sangat cocok untuk situs dengan konten yang sebagian besar statis, namun memiliki keterbatasan dalam fitur server-rendered yang dinamis, kode backend, dan pembaruan konten yang sering. Model situs statis mungkin hanya cocok untuk beberapa kasus penggunaan. Kelebihan-kelebihan tersebut diberikan di bawah ini:

Tabel 2: Kekurangan dari Gatsby

Kekurangan Deskripsi
Generasi Situs Statis Gatsby hanya membangun halaman HTML statis. Ini tidak bisa menangani fitur rendering sisi server yang dinamis.
Kurva Pembelajaran GraphQL GraphQL memiliki kurva pembelajaran, terutama jika Anda terbiasa dengan API REST.
Lingkungan Pengembangan Kompleks Gatsby memerlukan instalasi beberapa dependensi dan plugin, yang meningkatkan kompleksitas.
Konten Dinamis Terbatas Konten yang sering berubah sulit dikelola dalam Gatsby. Ini idealnya digunakan untuk situs yang sebagian besar statis.
Tidak Ada Kode Back-end Gatsby tidak menangani penulisan logika server aplikasi apa pun atau bekerja dengan basis data.
Kustomisasi Terbatas Sistem plugin dan konvensi dapat mempersulit untuk melampaui struktur Gatsby default.
Debugging Sulit Mendeteksi kesalahan pembangunan untuk situs Gatsby yang besar dan kompleks dapat sulit.
Server Pengembangan Lebih Lambat Gatsby menggunakan Webpack, yang dapat menyebabkan pemuatan panas lebih lambat dibandingkan dengan CRA.
Fragmentasi Seiring dengan pertumbuhan komunitas, fragmentasi plugin dapat membuat ekosistem menjadi berantakan dan kualitasnya tidak konsisten.

Perbandingan antara Gatsby vs Next.js

Gatsby dan Next.js adalah kerangka kerja populer yang membantu membangun situs web yang siap produksi dengan cepat.

Gatsby adalah generator situs statis yang membuat situs web yang sangat cepat dengan merender halaman HTML sebelumnya pada waktu pembangunan. Ini memanfaatkan teknik seperti pemisahan kode, lazy loading, optimisasi gambar, dan inlining CSS kritis untuk mengoptimalkan kinerja.

Next.js adalah kerangka kerja React yang memungkinkan rendering sisi server dan generasi situs statis. Ini dapat merender halaman pada waktu pembangunan dan menghasilkan halaman pada setiap permintaan, menghasilkan kinerja dan SEO yang luar biasa. Gatsby memiliki ekosistem plugin yang besar, sementara Next.js menawarkan routing yang lebih mudah dan kemampuan backend untuk situs yang dinamis.

Perbedaan kritis antara Gatsby vs Next JS adalah bahwa Gatsby memerlukan GraphQL untuk mengintegrasikan sumber data sementara Next.js dapat mengambil data pada waktu permintaan menggunakan getStaticProps dan getServerSideProps. Dalam hal kasus penggunaan, Gatsby paling cocok untuk situs web seperti blog, toko e-commerce, dan situs pemasaran. Jadi, perbedaan antara Next JS vs Gatsby diberikan.

Next.js lebih baik digunakan untuk aplikasi web dengan konten dinamis, dashboard pengalaman pengguna, dan backend API. Kedua kerangka kerja ini menawarkan kinerja, SEO, dan pengalaman pengembangan yang sangat baik untuk situs berbasis React.

Pilihan antara kedua kerangka kerja tersebut tergantung pada kebutuhan spesifik dari suatu proyek. Perbedaan dalam penggunaan server antara Next JS vs Gatsby dapat dilihat pada Tabel 3:

Tabel 3: Perbedaan antara Next JS vs Gatsby

Kategori Gatsby NextJs
Metode Rendering Generasi Situs Statis (SSG) - Membangun halaman HTML pada waktu pembangunan Rendering Sisi Server (SSR) - Halaman dihasilkan pada setiap permintaan
Kinerja Sangat Baik - HTML yang sudah dibangun dioptimalkan untuk muatan tercepat Sangat Baik - SSR menghasilkan muatan pertama yang cepat
SEO Sangat Baik - Halaman HTML dioptimalkan untuk SEO Sangat Baik - SSR membantu dalam pengindeksan
Kurva Pembelajaran Mudah hingga Sedang - Keterampilan React sudah cukup, tetapi GraphQL menambah kurva pembelajaran. Sedang - Perlu mempelajari konsep SSR.
Routing Rute berbasis sistem file - Halaman otomatis Halaman berbasis sistem file - Routing manual juga memungkinkan
Perbedaan dalam Pengambilan Data Waktu pembangunan - Menggunakan kueri GraphQL Waktu runtime - getStaticProps atau getServerSideProps
Server Kustom Tidak mungkin secara langsung - Membutuhkan server eksternal Bawaan - Server fleksibel menggunakan Node.js
Styling Modul CSS, Sass, Styled Components, dll. Dukungan CSS bawaan dan berbagai library CSS-in-JS.
Plugin Ekosistem plugin yang besar. Ini adalah ekosistem plugin yang lebih kecil tetapi masih layak.
Pembaruan Regenerasi inkremental halaman Pembaruan frekuensi memerlukan penyebaran ulang
Kode Backend Tidak mungkin - Gatsby adalah generator situs statis Rute API memungkinkan pembuatan API REST dan logika sisi server
Kasus Penggunaan Ideal Blog, situs pemasaran, toko e-commerce Situs dengan konten dinamis, antarmuka pengguna dan dasbor, dll.
Komunitas & Dukungan Ini adalah komunitas yang besar dan aktif Komunitas yang besar dan berkembang
Harga Open-source dan gratis Open-source dan gratis

Memulai Instalasi

Instalasi nodejs download di https://nodejs.org/en (pilih LTS)
Buka scode, pada vscode buka terminal (sebelumnya sudah install gitbash)
Pada terminal vscode jalankan:
$ cd Desktop
$ mkdir Proyek
$ cd Proyek
$ npm install -g gatsby-cli@latest

Untuk instalasi Gatsbyjs versi terupdate. Cek versi gatsbyJs:

$gatsby -v

Cek versi nodeJs:

$node -v
Instalasi Gatsby starter blog, jalankan perintah:
$gatsby new
What would you like to call your site?

Isikan nama website misalnya: My Blog

What would you like to name the folder where your site will be created?

Isikan foldernya: my-blog

Will you be using JavaScript or TypeScript?

Pilih: TypeScript

Will you be using a CMS?

Pilih: No (or I'll add it later

Would you like to install a styling system?

Pilih: No (or I'll add it later)

Would you like to install additional features with other plugins?

Pilih: Done

Shall we do this? (Y/n) » Yes

Pilih/tekan tombol: Y Jika tampil pesan seperti berikut:

Start by going to the directory with
cd my-blog

Start the local development server with

npm run develop
See all commands at
https://www.gatsbyjs.com/docs/reference/gatsby-cli/

Jika tampil pesan di atas. Selamat, anda berhasil menginstall GatsbyJS.

Untuk run web yang sudah di install:

$ cd my-blog
$ npm run dev

Atau

$ gatsby develop

Jika tampil pesan berikut:

You can now view my-blog in the browser.
http://localhost:8000/
View GraphiQL, an in-browser IDE, to explore your site's data and schema
http://localhost:8000/___graphql

Selamat, anda berhasil menginstall dan menjalakan Gatsby starter blog, berikutnya silahkan ikuti Langkah untuk instalasi tailwindCSS. Akses web blog dengan ketik di url / browser anda: http://localhost:8000

Instalasi tailwindCSS di gatsbyJS, jalankan perintah:
$ npm install -D gatsby-plugin-postcss tailwindcss@latest postcss@latest autoprefixer@latest
$ npx tailwindcss init -p 

Membuat dua file tailwind.config dan postcss.config Tambahkan baris berikut pada file tailwind.config

purge: ['./src/**/*.{js,jsx,ts,tsx}'],

Tambahkan baris berikut pada file gatsby-config

gatsby-plugin-postcss

Buatkan folder styles pada folder src, dan buatkan file global.css. Isikan file global.css dengan baris berikut:

@tailwind base;
@tailwind components;
@tailwind utilities;

Buatkan file Gatsby-browser.js pada root direktori,isikan baris berikut:

import "./src/styles/global.css"
Instalasi Gatsby plugin yang dibutuhkan, seperti:
  • gatsby-source-filesystem, adalah sebuah plugin dalam ekosistem Gatsby yang membantu dalam membaca berkas dari berbagai sumber. Sumber-sumber ini dapat mencakup berbagai direktori dalam folder proyek kita, seperti direktori lokal di proyek Gatsby, Wordpress, Contentful, dan banyak lagi. Dengan menggunakan plugin ini, kita dapat dengan mudah mengakses dan memanipulasi berkas dari berbagai sumber tersebut dalam pembangunan situs web kita.
  • gatsby-transformer-remark, adalah plugin Gatsby yang membantu kita dalam bekerja dengan berkas Markdown. Markdown adalah format penulisan yang ringan dan mudah dibaca, yang sering digunakan untuk menulis konten dalam proyek Gatsby. Plugin ini memungkinkan kita untuk mengambil berkas Markdown, menguraikannya menjadi struktur data yang dapat diproses oleh Gatsby, dan menggunakan kontennya untuk membangun halaman-halaman situs web kita.
  • gatsby-plugin-image and gatsby-plugin-sharp, adalah plugin Gatsby yang memungkinkan kita untuk bekerja dengan gambar dalam proyek Gatsby. gatsby-plugin-sharp adalah plugin yang memproses gambar dan menyediakan berbagai fungsi manipulasi gambar, seperti mengubah ukuran, memotong, dan mengompresi gambar. Sedangkan gatsby-plugin-image adalah plugin yang memungkinkan kita untuk menggunakan komponen gambar yang dioptimalkan secara otomatis dan responsif dalam proyek Gatsby kita, dengan menyediakan API yang mudah digunakan untuk memuat dan menampilkan gambar.
  • gatsby-transformer-sharp, adalah plugin Gatsby yang memungkinkan kita untuk bekerja dengan gambar dinamis. Plugin ini mengambil gambar yang terdapat dalam proyek Gatsby kita, memprosesnya dengan menggunakan gatsby-plugin-sharp, dan menyediakan API untuk mengakses gambar-gambar tersebut dalam bentuk yang dioptimalkan dan siap digunakan dalam pembangunan situs web kita. Dengan menggunakan plugin ini, kita dapat dengan mudah mengintegrasikan gambar-gambar dinamis ke dalam halaman-halaman situs web kita dalam proyek Gatsby.
Pada gatsby-config.js isikan baris berikut:
    `gatsby-plugin-image`,
    `gatsby-plugin-sharp`,
    `gatsby-transformer-sharp`,
    `gatsby-transformer-remark`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/images`,
      },
    },
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `blog-posts`,
        path: `${__dirname}/src/blog-posts`,
      },
    },

Memulai dengan TailwindCSS

Gunakan font Montserrat dan Rammetto fonts dari Google Fonts.
Konfigurasi file tailwind.config, berikut settignya:
/** @type {import('tailwindcss').Config} */
module.exports = {
  purge: ['./src/**/*.{js,jsx,ts,tsx}'],
  content: [],
  theme: {
    fontFamily: {
      roboto: ['Roboto, sans-serif'],
      karla: ['Karla, sans-serif']
    },
    extend: {},
  },
  plugins: [],
}
Buat blog, misal judul blognya:
---
title: Web Development dengan Framework ReactJS (GatsbyJS) Beserta Contoh Pembuatan Web Modern
slug: web-development-dengan-framework-reactjs-beserta-contoh-kasus
tag: Web
image: ../images/web-dev.jpg
---

# Apa itu Gatsby?
Gatsby adalah kerangka kerja sumber terbuka untuk membangun situs web dan aplikasi modern yang cepat menggunakan React. Ini memungkinkan pengembang untuk membuat situs web statis yang sangat cepat menggunakan React dan memungkinkan integrasi data dari berbagai sumber seperti CMS tanpa kepala, layanan SaaS, API, basis data, sistem file, dan lainnya. 

Gatsby menghasilkan halaman HTML statis pada waktu pembangunan, sehingga situs memuat dengan sangat cepat. Ini menggunakan teknik kinerja web modern seperti prefetching sumber daya, pemisahan kode, dan lazy loading, optimasi gambar, dan inlining CSS kritis. Halaman HTML yang dibangun secara statis juga berarti Gatsby pada tahun 2024 memiliki kemampuan SEO yang sangat baik secara otomatis.
Buat layout pada folder components

Isikan file layout.js berikut:

import React from "react"
import { Link } from "gatsby"

const Layout = ({children}) => {
    const linkStyle = `
    Hover:opacity-70 
    text-sm
    sm:text-lg
    `
    const logoStyle = `
    text-white
    font-roboto
    sm:text-base
    text-sm
    `
return (
        <div>
            <nav className="flex sm:justify-between justify-around items-center bg-blue-950 lg:px-20 sm:px-6 py-8 text-gray-100">
                <h3 className={logoStyle}>My Blog</h3>
                <ul className="flex space-x-4">
                    <li className={linkStyle}>
                        <Link to="/">Home</Link>
                    </li>
                    <li className={linkStyle}>
                        <Link to="/contact">Contact</Link>
                    </li>
                    <li className={linkStyle}>
                        <Link to="/about">About</Link>
                    </li>
                </ul>
            </nav>
            <main>{children}</main>

            <footer className="text-center py-8 bg-blue-950 text-gray-100">
                <p>
                    Copyright 2024 My Blog
                </p>
            </footer>
        </div>
    )
}

export default Layout 
Buat file header.js, isikan file berikut:
import React from "react"

const Header = () => {
    return (
        <header className="bg-blue-950 text-gray-100 pt-16 pb-10 text-center">
            <h1 className="font-semibold font-roboto lg:text-5xl sm:text-4xl text-2xl pb-4">
                Welcome to My Blog
            </h1>
            <p className="lg:text-2xl sm:text-lg text-sm font-light">
                Berbagi pengalaman dan pengetahuan dibidang IT dan Digital Marketing
            </p>
        </header>
    )
}

export default Header
Buat folder blog kemudian buatkan dua file yakni blogItem.js dan Index.js, isikan kode berikut pada file blogItem.js:
import React from "react"
import { Link } from "gatsby"
import { GatsbyImage } from "gatsby-plugin-image"
import exp from "constants"

const BlogItem = ({alt, image, slug, title}) => {
    return (
        <div className="hover:opacity-50">
            <Link to={`/${slug}`}>
                <GatsbyImage image={image}
                alt={alt} className="max-h-[2000px]"
                />
                <h3 className="font-semibold text-block max-w-4/5 text-center mt-2 capitalize sm:text-base text-sm">{title}</h3>
            </Link>
        </div>
    )
}

export default BlogItem
Isikan kode berikut pada file index.js:
import React from "react"
import { graphql, useStaticQuery } from "gatsby"
import BlogItem from "./blogItem"

const Blog = () => {
    const articles = useStaticQuery(graphql`
        {
          allMarkdownRemark {
            nodes {
                frontmatter {
                    title
                    tag
                    slug
                    image {
                        childImageSharp {
                            gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED)
                                } 
                            }
                        }
                    html
                }
            }  
        }
    `)

    const allArticles = articles.allMarkdownRemark.node.map(( item, index ) => (
            <BlogItem
            key={index}
            image={item.frontmatter.image.childImageSharp.gatsbyImageData}
            slug={item.frontmatter.slug}
            alt={item.frontmatter.title}
            title={item.frontmatter.title}
            />
        )
    )
    return (
        <div className="px-10 py-12">
            <h3 className="text-2xl font-roboto">Tip dan Trik IT dan Digital Marketing</h3>
            <div className="grid md:grid-cols-3 grid-cols-2 gap-x-4 gap-y-10 mt-8">
            {allArticles}
            </div>            
        </div>
    )
}

export default Blog
Buat halaman about.js pada folder components isi file berikut:
import React from "react"
import Layout from "../component/Layout"
import AboutPage from "../components/AboutPage"
const About = () => {
    return (
        <Layout>
            <AboutPage/>
        </Layout>
    )
}

export default About
Buat file contact.js pada folder components isikan file berikut:
import React from 'react'
import Layout from "../components/Layout"
import ContactPage from "../components/ContactPage"

const Contact = () => {
    return (
        <Layout>
            <ContactPage/>
        </Layout>
    )
}

export default Contact
Buat halaman dinamis pada folder templates dengan nama file article.js isi file berikut:
import React from "react"
import {graphql} from "gatsby"
import Layout from "../components/Layout"
import { GatsbyImage } from "gatsby-plugin-image"

const Article = ({data}) => {
    const { html } = data.markdownRemark
    const { title, tag, image } = data.markdownRemark.frontmatter
    return(
      <Layout>
        <div className="w-4/5 mx-auto mt-9 article">
            <GatsbyImage image={image.childImageSharp.gatsbyImageData} className=" md:h-96 h-60"/>

            <section className="py-10">
                <span className="bg-gray-200 py-1 px-2 font-semibold">{tag}</span>
                <h2 className="font-semibold md:text-3xl text-xl
 py-4 capitalize">{title}</h2>

                <div dangerouslySetInnerHTML={{ __html: html }}></div>


                <p className="pt-8">Published in the {tag} category</p>
            </section>
        </div>
        </Layout>
    )
}

export default Article

export const query = graphql`
  query ArticleQuery($slug: String) {
    markdownRemark(frontmatter: {slug: {eq: $slug}}) {
      html
      frontmatter {
        title
            tag
            image {
                childImageSharp {
                    gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED)
                }
            }
      }
    }
  }
`
Isikan file gatsby-node.js dengan baris kode berikut:
import React from "react"
import {graphql} from "gatsby"
import Layout from "../components/Layout"
import { GatsbyImage } from "gatsby-plugin-image"

const Article = ({data}) => {
    const { html } = data.markdownRemark
    const { title, tag, image } = data.markdownRemark.frontmatter
    return(
      <Layout>
        <div className="w-4/5 mx-auto mt-9 article">
            <GatsbyImage image={image.childImageSharp.gatsbyImageData} className=" md:h-96 h-60"/>

            <section className="py-10">
                <span className="bg-gray-200 py-1 px-2 font-semibold">{tag}</span>
                <h2 className="font-semibold md:text-3xl text-xl
 py-4 capitalize">{title}</h2>

                <div dangerouslySetInnerHTML={{ __html: html }}></div>


                <p className="pt-8">Published in the {tag} category</p>
            </section>
        </div>
        </Layout>
    )
}

export default Article

export const query = graphql`
  query ArticleQuery($slug: String) {
    markdownRemark(frontmatter: {slug: {eq: $slug}}) {
      html
      frontmatter {
        title
            tag
            image {
                childImageSharp {
                    gatsbyImageData(layout: FULL_WIDTH, placeholder: BLURRED)
                }
            }
      }
    }
  }
`

Sampai tahap ini selesai sudah kita membuat web modern dengan Framework ReactJS yaknik GatsbyJs yang powerfull untuk pengembangan WEB yang cepat dan SEO yang handal.