Next.js 14 menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini memandu Anda langkah demi langkah menginstal, mengkonfigurasi, menulis kode contoh, serta menerapkan best practice untuk keamanan, performa, dan deployment di Vercel atau Docker.
1. Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Node.js v20.12 atau lebih baru (
node -v) - npm v10 atau pnpm v9 (kami rekomendasikan pnpm)
- Git CLI
- Akun Vercel (opsional untuk deployment)
- Docker Desktop (opsional untuk container)
2. Instalasi Project Next.js 14
mkdir next14-demo && cd next14-demo
pnpm init -y
pnpm add next@14 react@18.3 react-dom@18.3
Tambahkan skrip berikut ke package.json:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
3. Mengaktifkan App Router
Next.js 14 mengaktifkan App Router secara default ketika Anda menambahkan folder app di root.
mkdir -p app/layout.tsx app/page.tsx
Isi app/layout.tsx dengan layout global:
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
Next.js 14 Demo
{children}
);
}
File app/page.tsx menjadi beranda:
export default function Home() {
return (
Selamat Datang di Next.js 14
Ini adalah halaman utama yang dirender di server.
);
}
4. Menambahkan Server Actions
Server Actions memungkinkan Anda menulis fungsi server langsung di komponen React tanpa API route terpisah.
// app/contact/form.tsx
'use server';
import { redirect } from 'next/navigation';
export async function submitContact(formData: FormData) {
// Validasi sederhana
const name = formData.get('name')?.toString().trim();
const email = formData.get('email')?.toString().trim();
const message = formData.get('message')?.toString().trim();
if (!name || !email || !message) {
throw new Error('Semua field wajib diisi');
}
// Simulasi penyimpanan ke DB atau panggilan API eksternal
await new Promise((r) => setTimeout(r, 500));
console.log('Contact submitted:', { name, email, message });
// Setelah sukses, redirect ke halaman terima kasih
redirect('/thanks');
}
Komponen formulir yang memanggil server action:
// app/contact/page.tsx
import { submitContact } from './form';
export default function ContactPage() {
return (
);
}
Halaman terima kasih sederhana:
// app/thanks/page.tsx
export default function Thanks() {
return (
Terima Kasih!
Pesan Anda telah kami terima.
);
}
5. Konfigurasi Typescript & ESLint
pnpm add -D typescript @types/react @types/node
pnpm exec next telemetry disable # opsional, matikan telemetry
pnpm add -D eslint eslint-config-next
# Initialise
pnpm exec eslint --init
Pastikan tsconfig.json berisi:
{
"compilerOptions": {
"target": "es2022",
"module": "esnext",
"moduleResolution": "node",
"jsx": "preserve",
"strict": true,
"baseUrl": ".",
"paths": { "@/*": ["./*"] }
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
6. Optimasi Performa
- Image Optimization: Gunakan
next/imagedengan loader default Vercel. Contoh:import Image from 'next/image'; - Middleware Caching: Tambahkan file
middleware.tsuntuk cache static route.import { NextResponse } from 'next/server'; export async function middleware(request) { const response = NextResponse.next(); response.headers.set('Cache-Control', 'public, max-age=60, stale-while-revalidate=30'); return response; } - React Server Components (RSC): Semua file di
appsecara default adalah RSC, gunakan'use client'hanya bila diperlukan.
7. Keamanan Dasar
- Aktifkan
Content‑Security‑Policydinext.config.js.module.exports = { async headers() { return [{ source: '/(.*)', headers: [{ key: 'Content-Security-Policy', value: "default-src 'self'; img-src https: data:; script-src 'self' 'unsafe-inline'" }] }]; } }; - Gunakan
next-authatauauth.jsuntuk autentikasi JWT yang terintegrasi.
8. Testing dengan Jest & React Testing Library
pnpm add -D jest @testing-library/react @testing-library/jest-dom @types/jest ts-jest
# jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
moduleNameMapper: {
'^@/(.*)
Dengan mengikuti tutorial ini, Anda kini memiliki aplikasi Next.js 14 yang memanfaatkan App Router, Server Actions, optimasi performa, serta pipeline CI/CD siap di‑deploy ke Vercel atau dijalankan dalam Docker. Terapkan best practice keamanan dan testing untuk menjaga kualitas kode, dan manfaatkan ekosistem plugin (next‑auth, next‑image, dll) untuk mempercepat pengembangan lebih lanjut. Selamat coding!
Tutorial lengkap Next.js 14 2026: instalasi, App Router, Server Actions, konfigurasi keamanan, optimasi performa, testing, Docker, dan deployment ke Vercel.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
: '/$1'
}
};
Contoh tes untuk komponen Home:
// __tests__/home.test.tsx
import { render, screen } from '@testing-library/react';
import Home from '@/app/page';
test('menampilkan judul selamat datang', () => {
render( );
expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Selamat Datang di Next.js 14');
});
9. Deployment ke Vercel
- Push repository ke GitHub.
- Buka Vercel dashboard → "New Project" → pilih repo.
- Vercel otomatis mendeteksi Next.js 14; biarkan Build Command
pnpm builddan Output Directory.next. - Set environment variable
NODE_ENV=productionjika diperlukan. - Deploy! Vercel akan menambahkan preview URL untuk setiap PR.
10. Containerisasi dengan Docker
# Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next .next
COPY --from=builder /app/node_modules node_modules
COPY --from=builder /app/package.json .
EXPOSE 3000
CMD ["pnpm", "run", "start"]
Build & run:
docker build -t next14-demo .
docker run -p 3000:3000 next14-demo
11. Best Practice Ringkas
- Gunakan
appdirectory penuh, hindaripageskecuali legacy. - Simpan secrets di Vercel/Env dan akses lewat
process.env– jangan hard‑code. - Jaga ukuran bundle dengan
dynamic()dan lazy loading komponen berat. - Selalu jalankan
pnpm auditdan perbarui dependencies secara periodik. - Gunakan TypeScript strict mode untuk mengurangi bug runtime.
{{ $json.conclusion }}
{{ $json.seo.meta_description }}
{{ $json.seo.keywords }}
{{ $json.hashtags }}
0 Komentar