Next.js 14 menjadi standar de‑facto untuk pengembangan web React modern. Tutorial ini memberi langkah‑langkah detail mulai dari instalasi, konfigurasi, contoh kode, hingga best practice untuk performa dan keamanan di lingkungan produksi.
1. Persiapan Lingkungan
Pastikan Anda memiliki Node.js versi 20.x atau lebih baru dan npm atau pnpm terbaru. Anda dapat memeriksa versi dengan perintah berikut:
node -v
npm -v # atau pnpm -v
Jika belum terpasang, unduh Node.js di nodejs.org dan ikuti instalasi untuk sistem operasi Anda.
2. Membuat Proyek Next.js 14
Gunakan create-next-app dengan flag --experimental-app untuk mengaktifkan App Router secara otomatis:
npx create-next-app@latest my-next14-app --experimental-app --ts
cd my-next14-app
Perintah di atas membuat proyek TypeScript dengan struktur App Router (app/) yang siap pakai.
3. Instalasi Dependensi Tambahan
eslintdanprettieruntuk linting dan format coding.next-authuntuk otentikasi.tailwindcssuntuk styling cepat.
npm i -D eslint prettier eslint-config-prettier eslint-plugin-react
npm i next-auth
npm i -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Konfigurasikan tailwind.config.js:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./app/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
theme: { extend: {} },
plugins: [],
};
4. Struktur Direktori Utama
my-next14-app/
├─ app/
│ ├─ layout.tsx # Root layout
│ ├─ page.tsx # Home page
│ ├─ dashboard/
│ │ └─ page.tsx # Protected route contoh
│ └─ api/
│ └─ auth/
│ └─ route.ts # API route Auth
├─ components/
│ └─ Navbar.tsx
├─ lib/
│ └─ prisma.ts # Contoh prisma client
└─ public/
└─ favicon.ico
Struktur di atas mengikuti konvensi App Router; setiap folder di dalam app/ otomatis menjadi route.
5. Membuat Root Layout dengan Server Components
/* app/layout.tsx */
import './globals.css';
import Navbar from '@/components/Navbar';
export const metadata = {
title: 'Next.js 14 Demo',
description: 'Demo aplikasi dengan App Router & Server Components',
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
Root layout dijalankan sebagai Server Component secara default, sehingga tidak menambah bundle client.
6. Menambahkan Navbar sebagai Client Component
/* components/Navbar.tsx */
"use client";
import Link from 'next/link';
import { signIn, signOut, useSession } from 'next-auth/react';
export default function Navbar() {
const { data: session, status } = useSession();
return (
);
}
Tambahkan styling pada globals.css yang di‑generate Tailwind.
7. Konfigurasi Auth dengan Next‑Auth (Route Handlers)
/* app/api/auth/[...nextauth]/route.ts */
import NextAuth from 'next-auth';
import GithubProvider from 'next-auth/providers/github';
const handler = NextAuth({
providers: [
GithubProvider({
clientId: process.env.GITHUB_ID!,
clientSecret: process.env.GITHUB_SECRET!,
}),
],
secret: process.env.NEXTAUTH_SECRET,
});
export { handler as GET, handler as POST };
Jangan lupa menambahkan variabel lingkungan di .env.local:
GITHUB_ID=xxxxxxxxxxxxxxxx
GITHUB_SECRET=xxxxxxxxxxxxxxxx
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=super-secret-random-string
8. Protected Route – Dashboard
/* app/dashboard/page.tsx */
import { redirect } from 'next/navigation';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/app/api/auth/[...nextauth]/options';
export default async function DashboardPage() {
const session = await getServerSession(authOptions);
if (!session) redirect('/api/auth/signin');
return (
Welcome, {session.user?.name}
This is a protected dashboard using Server Components.
);
}
Dengan getServerSession di Server Component, tidak ada JavaScript yang dikirim ke client untuk pengecekan auth.
9. Optimasi Gambar dengan Next/Image
Next.js 14 memperkenalkan next/future/image yang otomatis meng‑generate modern formats (AVIF, WebP) dan lazy‑load.
/* app/page.tsx */
import Image from 'next/future/image';
import heroImg from '@/public/hero.jpg';
export default function Home() {
return (
Next.js 14 + App Router
);
}
10. Deploy ke Vercel (atau alternatif seperti Netlify)
- Commit seluruh kode ke repository Git (GitHub, GitLab, atau Bitbucket).
- Buka vercel.com dan pilih New Project.
- Hubungkan repository, pastikan Framework Preset terdeteksi sebagai
Next.js. - Tambahkan environment variables (GITHUB_ID, GITHUB_SECRET, NEXTAUTH_SECRET, NEXTAUTH_URL).
- Deploy! Vercel otomatis menjalankan
npm run builddan menyediakan preview URL.
Jika menggunakan Docker, berikut Dockerfile minimal:
# Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "server.js"]
11. Best Practice untuk Production
- Static Generation (SSG) bila memungkinkan – gunakan
export const dynamic = 'force-static';di page yang tidak membutuhkan data runtime. - Incremental Static Regeneration (ISR) untuk konten yang berubah sesekali, contoh
revalidate = 60. - Header Security – tambahkan
Content‑Security‑Policy,X‑Frame‑Optionslewat middleware:
/* middleware.ts */
import { NextResponse } from 'next/server';
export function middleware(request) {
const response = NextResponse.next();
response.headers.set('X-Frame-Options', 'DENY');
response.headers.set('Content-Security-Policy', "default-src 'self'; img-src https: data:; script-src 'self' 'unsafe-inline'");
return response;
}
- Analitik & Monitoring – integrasikan Vercel Analytics atau gunakan
@vercel/analyticsuntuk metric real‑time. - Cache Control – manfaatkan
Cache‑Tagdi API routes untuk invalidasi cache CDN.
12. Testing dengan Jest & React Testing Library
npm i -D jest @testing-library/react @testing-library/jest-dom ts-jest
npx jest --init
Contoh unit test untuk komponen Navbar:
/* __tests__/Navbar.test.tsx */
import { render, screen } from '@testing-library/react';
import Navbar from '@/components/Navbar';
jest.mock('next-auth/react', () => ({
useSession: () => ({ data: null, status: 'unauthenticated' }),
signIn: jest.fn(),
signOut: jest.fn(),
}));
test('renders sign‑in button when unauthenticated', () => {
render( );
expect(screen.getByText(/sign in/i)).toBeInTheDocument();
});
13. CI/CD dengan GitHub Actions
name: Deploy to Vercel
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run lint && npm run test
- name: Deploy
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-args: '--prod'
working-directory: .
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
Pipeline ini menjalankan lint, test, lalu deploy otomatis ke Vercel setiap merge ke main.
14. Ringkasan Langkah
- Instal Node.js 20+
- Inisialisasi proyek dengan
create-next-app(App Router, TypeScript) - Tambahkan linting, Tailwind, dan next‑auth
- Bangun layout server‑side dan komponen client‑side
- Implementasikan route API untuk otentikasi
- Gunakan Server Components untuk halaman yang memerlukan data aman
- Optimasi gambar, security headers, dan caching
- Deploy via Vercel atau Docker
- Tambahkan testing dan CI/CD
Dengan mengikuti panduan ini, Anda akan memiliki aplikasi Next.js 14 yang modern, cepat, dan siap produksi.
Next.js 14 menggabungkan kekuatan React Server Components, App Router, dan optimasi otomatis yang membuatnya pilihan utama untuk Web Development modern. Tutorial step‑by‑step di atas memberikan fondasi yang kokoh—mulai dari instalasi, konfigurasi otentikasi, hingga CI/CD — sehingga Anda dapat fokus pada fitur bisnis tanpa khawatir tentang performa atau keamanan. Selalu perbarui dependensi, monitor metric di Vercel, dan terapkan best practice yang disebutkan untuk menjaga aplikasi tetap scalable dan reliable.
Panduan lengkap setup Next.js 14 dengan App Router, Server Components, autentikasi, dan deployment di Vercel. Langkah demi langkah, contoh kode, dan best practice untuk Programming, Software Engineering, dan Web Development.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar