Next.js 14 menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini memberikan langkah‑langkah detail mulai dari instalasi, konfigurasi, hingga contoh kode produksi, lengkap dengan best practice untuk keamanan, performa, dan skalabilitas.
1. Prasyarat
Pastikan Anda sudah menginstall Node.js versi 20.11 LTS atau lebih baru, serta git dan npm (atau pnpm pnpm yang kini menjadi pilihan default untuk proyek Next.js). Jika belum, instal dari nodejs.org.
2. Membuat Proyek Baru
npx create-next-app@latest my-next14-app --ts --eslint --app
cd my-next14-app
Perintah di atas akan menghasilkan struktur folder dengan app/ directory (App Router) serta TypeScript dan ESLint yang sudah ter‑konfigurasi.
2.1 Memilih Package Manager
Next.js 14 mengoptimalkan pnpm karena hoisting yang lebih efisien. Jika Anda menggunakan npm, jalankan npm i -g npm untuk memastikan versi terbaru.
3. Instalasi Dependensi Tambahan
# UI library modern (Tailwind CSS 3.4)
pnpm add -D tailwindcss postcss autoprefixer
pnpm tailwindcss init -p
# React Server Components (built‑in) tidak memerlukan paket tambahan, tapi untuk data fetching ringan gunakan SWR
pnpm add swr
# Pada proyek yang memerlukan autentikasi, tambahkan next-auth v5
pnpm add next-auth
3.1 Konfigurasi Tailwind
Edit tailwind.config.js:
module.exports = {
content: ["./app/**/*.{js,ts,jsx,tsx}", "./pages/**/*.{js,ts,jsx,tsx}"],
theme: { extend: {} },
plugins: [],
};
Dan tambahkan direktif di app/globals.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
4. Struktur Direktori App Router
Berikut contoh struktur yang direkomendasikan:
app/
├─ layout.tsx # Root layout dengan &
├─ page.tsx # Landing page (Server Component)
├─ dashboard/
│ ├─ layout.tsx # Layout khusus dashboard (protected)
│ ├─ page.tsx # Dashboard home (Client Component)
│ └─ profile/
│ └─ page.tsx # Profil user (Server Component)
└─ api/
└─ auth/
└─ route.ts # Next‑Auth endpoint
4.1 Root Layout
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
My Next.js 14 App
{children}
);
}
5. Membuat Server Component dengan Data Fetching
Server Component dapat langsung fetch data tanpa menulis useEffect. Contoh:
// app/dashboard/profile/page.tsx (Server Component)
import { Suspense } from "react";
import { fetchUserProfile } from "@/lib/api";
export const dynamic = "force-static"; // Mengaktifkan ISR
export default async function ProfilePage() {
const profile = await fetchUserProfile();
return (
<Suspense fallback=<div>Loading…</div>>
<section className="p-6 bg-white rounded shadow">
<h1 className="text-2xl font-bold">{profile.name}</h1>
<p>{profile.email}</p>
</section>
</Suspense>
);
}
5.1 Implementasi ISR
Tambahkan revalidate pada file next.config.js atau langsung pada page dengan export revalidate = 60 untuk memperbarui tiap menit.
6. Konfigurasi NextAuth (Auth v5)
// app/api/auth/[...nextauth]/route.ts
import NextAuth from "next-auth";
import GitHubProvider from "next-auth/providers/github";
export const auth = NextAuth({
providers: [GitHubProvider({ clientId: process.env.GITHUB_ID!, clientSecret: process.env.GITHUB_SECRET! })],
session: { strategy: "jwt" },
callbacks: {
async jwt({ token, account }) {
if (account) token.accessToken = account.access_token;
return token;
},
async session({ session, token }) {
session.accessToken = token.accessToken as string;
return session;
},
},
});
Jangan lupa menambahkan variabel lingkungan di .env.local dan melindungi file tersebut di .gitignore.
7. Menambahkan API Route dengan Edge Runtime
// app/api/hello/route.ts
export const runtime = "edge"; // Menggunakan Vercel Edge Functions
export async function GET() {
return new Response(JSON.stringify({ message: "Hello from Edge!" }), {
headers: { "Content-Type": "application/json" },
});
}
7.1 Keuntungan Edge Runtime
Latency lebih rendah karena eksekusi dekat dengan pengguna akhir, cocok untuk autentikasi token ringan atau feature‑flag.
8. Optimasi Performa
- Image Optimization: Gunakan
next/imagedenganloader: "custom"bila menghosting di Cloudflare Images. - Static Generation + ISR: Pilih
export const revalidate = 300pada halaman yang jarang berubah. - Code Splitting: Manfaatkan
dynamic()untuk lazy‑load komponen heavy.import dynamic from "next/dynamic"; const Chart = dynamic(() => import("@/components/Chart"), { ssr: false }); - Header Caching: Tambahkan
Cache-Controldi API route untuk data yang tidak sensitif.
9. Deploy ke Vercel (Recommended) atau Cloudflare Pages
- Push repository ke GitHub.
- Buka dashboard Vercel, pilih New Project, sambungkan repo.
- Vercel otomatis mendeteksi
next.config.jsdan mengaktifkan Edge Runtime bila ada. - Set environment variables (GITHUB_ID, GITHUB_SECRET, NEXTAUTH_SECRET).
- Deploy dan verifikasi
/api/helloserta autentikasi.
10. Best Practice untuk Production
- Security: Aktifkan
headers()dinext.config.jsuntuk CSP, X‑Frame‑Options, dan Referrer‑Policy. - Linting & Formatting: Pastikan
eslintdanprettierberjalan pada pre‑commit hook (husky). - Testing: Gunakan
jest+@testing-library/reactuntuk unit, danplaywrightuntuk end‑to‑end. - Monitoring: Integrasikan dengan Vercel Analytics atau Sentry untuk error tracking.
- Version Control: Tag rilis dengan semantic versioning (v1.0.0, v1.1.0‑beta).
Dengan mengikuti tutorial ini Anda telah membangun aplikasi Next.js 14 yang memanfaatkan App Router, Server Components, ISR, serta autentikasi modern menggunakan Next‑Auth. Kombinasi best practice di atas memastikan kode tetap bersih, aman, dan siap skala di lingkungan produksi seperti Vercel atau Cloudflare. Eksperimen lebih lanjut dengan middleware, edge‑only routes, dan AI‑augmented UI untuk tetap berada di garis depan web development 2026.
Panduan lengkap langkah demi langkah setup Next.js 14 dengan App Router, Server Components, ISR, dan Next‑Auth. Termasuk instalasi, konfigurasi, contoh kode, serta best practice untuk keamanan dan performa.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar