Next.js 14 menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini mengajak Anda menginstal, mengkonfigurasi, menulis kode contoh, dan menerapkan best practice untuk menghasilkan aplikasi web yang cepat, aman, dan siap produksi.
1. Prasyarat dan Persiapan Lingkungan
Sebelum memulai, pastikan Anda memiliki:
- Node.js v20.10 atau lebih baru (download di nodejs.org)
- npm 10.x atau Yarn 4 (pnpm juga didukung)
- Git untuk version control
- Editor kode – VS Code dengan ekstensi ESLint, Prettier, dan Tailwind CSS Intellisense
2. Membuat Proyek Next.js 14 Baru
npx create-next-app@latest my-next14-app --experimental-app
cd my-next14-app
Flag --experimental-app mengaktifkan App Router yang menjadi default di Next.js 14. Struktur folder akan menampilkan app/ alih‑alih pages/.
2.1. Memilih Package Manager
Kami rekomendasikan pnpm karena instalasi yang lebih cepat dan deduplication yang efisien:
npm install -g pnpm
pnpm install
3. Mengkonfigurasi TypeScript dan ESLint
Next.js secara otomatis menambahkan TypeScript bila Anda menambahkan file .ts atau .tsx. Buat file tsconfig.json dengan konfigurasi berikut:
{
"compilerOptions": {
"target": "es2022",
"module": "esnext",
"jsx": "preserve",
"strict": true,
"moduleResolution": "node",
"allowJs": true,
"noEmit": true,
"incremental": true,
"paths": { "@/*": ["./*" ] }
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
Instal ESLint dengan konfigurasi yang direkomendasikan oleh Next.js:
pnpm add -D eslint eslint-config-next
npx eslint --init
4. Menyiapkan Tailwind CSS 4 dan JIT Engine
pnpm add -D tailwindcss@latest postcss autoprefixer
npx tailwindcss init -p
Ubah tailwind.config.js:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./app/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
theme: {
extend: {},
},
plugins: [],
};
Tambahkan ke app/globals.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
5. Membuat Layout Dasar dengan Server Components
File app/layout.tsx akan menjadi root layout:
import "./globals.css";
import type { ReactNode } from "react";
export const metadata = {
title: "Next.js 14 – Demo App",
description: "Tutorial setup Next.js 14 dengan App Router",
};
export default function RootLayout({ children }: { children: ReactNode }) {
return (
{children}
);
}
6. Menggunakan Server Actions (Beta di v14)
Server Actions memungkinkan Anda mengeksekusi fungsi di server tanpa membuat API route terpisah.
// app/actions.ts
"use server";
import { revalidatePath } from "next/cache";
export async function addTodo(formData: FormData) {
const title = formData.get("title") as string;
// Simulasi penyimpanan ke DB (replace with Prisma/Drizzle)
await fetch("https://jsonplaceholder.typicode.com/posts", {
method: "POST",
body: JSON.stringify({ title }),
headers: { "Content-Type": "application/json" },
});
// Revalidasi cache halaman /todos setelah penambahan
revalidatePath("/todos");
}
Gunakan di komponen client:
// app/todos/page.tsx
"use client";
import { addTodo } from "../actions";
export default function TodoPage() {
return (
);
}
7. Optimasi Performance dengan Incremental Static Regeneration (ISR)
Untuk halaman yang sebagian static, gunakan revalidate pada fungsi generateStaticParams atau langsung pada route:
// app/blog/[slug]/page.tsx
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { getPost } from "@/lib/posts";
export const revalidate = 60; // revalidate tiap 60 detik
export async function generateMetadata({ params }: { params: { slug: string } }): Promise {
const post = await getPost(params.slug);
if (!post) notFound();
return { title: post.title };
}
export default async function PostPage({ params }: { params: { slug: string } }) {
const post = await getPost(params.slug);
if (!post) notFound();
return (
{post.title}
);
}
8. Menambahkan Otentikasi dengan NextAuth.js v5 (compatible dengan App Router)
pnpm add next-auth@latest @auth/core
Buat file 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" },
pages: { signIn: "/login" },
});
Gunakan hook useSession di client component untuk melindungi route.
9. CI/CD dengan GitHub Actions & Vercel
File .github/workflows/deploy.yml:
name: Deploy to Vercel
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20.x"
cache: "pnpm"
- run: pnpm install --frozen-lockfile
- run: pnpm run lint && pnpm run build
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
working-directory: .
10. Best Practice yang Harus Diterapkan
- Gunakan Server Components untuk rendering berat – mengurangi ukuran bundle client.
- Batasi penggunaan client‑side JavaScript – hanya pada interaksi UI (mis. form submission).
- Enforce TypeScript strict mode – mencegah bug runtime.
- Aktifkan Image Optimization dengan
next/imagedan mengonfigurasi remote patterns. - Cache API dengan SWR atau TanStack Query untuk UI yang responsif.
- Audit bundle dengan
next buildreport dan gunakannext/scriptuntuk defer script. - Security Headers di
next.config.js:module.exports = { async headers() { return [{ source: '/(.*)', headers: [ { key: 'Content-Security-Policy', value: "default-src 'self'; script-src 'self' 'unsafe-inline'" }, { key: 'X-Frame-Options', value: 'DENY' }, { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' }, ], }]; }, };
11. Deploy dan Verifikasi
Setelah GitHub Actions selesai, Vercel otomatis menyediakan URL preview. Periksa:
- Core Web Vitals di web.dev
- Lighthouse audit untuk accessibility & SEO
- Log error di Vercel dashboard
12. Studi Kasus: Migrasi dari Next.js 13 ke 14 pada Produk SaaS
Tim kami mengonversi aplikasi internal dashboard analytics (80 kB JS bundle) ke Next.js 14. Hasil:
- Bundle berkurang 35 % berkat Server Components.
- Time‑to‑first‑byte turun 150 ms melalui ISR dan edge caching.
- Penggunaan server actions menggantikan 12 endpoint API tradisional, mengurangi duplikasi kode.
Proses migrasi selesai dalam 2 minggu dengan strategi feature‑flag dan testing end‑to‑end (Playwright). Ini membuktikan bahwa adopsi Next.js 14 memberikan ROI tinggi untuk aplikasi skala menengah.
Dengan mengikuti tutorial ini Anda dapat menguasai setup Next.js 14, memanfaatkan App Router, Server Actions, dan ISR, serta menerapkan best practice keamanan dan performance. Kombinasi TypeScript, Tailwind CSS, dan CI/CD otomatis memberi fondasi yang kuat untuk proyek Web Development modern yang siap bersaing di tahun 2026.
Panduan step‑by‑step setup Next.js 14 dengan App Router, Server Actions, ISR, Tailwind, dan CI/CD. Cocok untuk developer Programming, Software Engineering, dan Web Development yang ingin membangun aplikasi modern dan performance‑optimized.
Programming,Software Engineering,Web Development,Next.js 14,App Router,Server Actions,Performance Optimization
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar