Next.js 14 menjadi standar baru untuk aplikasi React modern. Tutorial ini memberi langkah demi langkah cara menginstal, mengkonfigurasi, menulis kode, dan menerapkan best practice keamanan serta performa pada proyek Next.js 14 di tahun 2026.
1. Prasyarat dan Persiapan Lingkungan
Pastikan Anda memiliki:
- Node.js v20.10 atau lebih baru (download)
- npm v10 atau Yarn v4 (pilih salah satu)
- Git untuk version control
- Editor kode modern, misalnya VS Code dengan ekstensi ESLint dan Prettier
Verifikasi instalasi dengan:
node -v
npm -v # atau yarn -v
2. Membuat Proyek Next.js 14 Baru
Gunakan create-next-app yang sudah terintegrasi dengan versi terbaru:
npx create-next-app@latest my-next14-app --typescript --eslint --tailwind
Parameter yang dipakai:
- --typescript: menyiapkan TypeScript out‑of‑the‑box.
- --eslint: menambahkan konfigurasi linting standar.
- --tailwind: menginstall Tailwind CSS v4 (rilis 2026) untuk styling cepat.
Setelah selesai, masuk ke direktori proyek:
cd my-next14-app
3. Struktur Direktori Utama di Next.js 14
Berikut layout yang penting untuk App Router:
app/
layout.tsx # Root layout, menampung dan
page.tsx # Landing page (route "/")
dashboard/
layout.tsx # Layout khusus dashboard
page.tsx # Route "/dashboard"
actions.ts # Server Actions untuk dashboard
api/
route.ts # API Route (edge atau node)
public/
favicon.ico
...
Folder pages/ masih ada untuk backward compatibility, tetapi fokus pada app/ untuk proyek baru.
4. Instalasi Dependensi Tambahan
Berikut paket yang direkomendasikan pada Juni 2026:
npm i @tanstack/react-query@5 @headlessui/react@2 zod@3.23
npm i -D @types/node@20
# Jika menggunakan Yarn
# yarn add @tanstack/react-query@5 @headlessui/react@2 zod@3.23
# yarn add -D @types/node@20
Penjelasan singkat:
- @tanstack/react-query: data fetching & caching yang terintegrasi dengan Server Actions.
- @headlessui/react: komponen UI tanpa gaya, cocok dengan Tailwind.
- zod: schema validation untuk input API dan Server Actions.
5. Konfigurasi TypeScript & ESLint
Edit tsconfig.json untuk menambahkan path alias “@/”.
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./*" ]
},
"strict": true,
"moduleResolution": "node",
"jsx": "preserve",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
Pastikan .eslintrc.json mengaktifkan eslint-plugin-next dan eslint-plugin-react-hooks:
{
"extends": ["next/core-web-vitals", "plugin:react-hooks/recommended"],
"rules": {
"react/react-in-jsx-scope": "off",
"@next/next/no-html-link-for-pages": "off"
}
}
6. Membuat Layout Global dengan Server Components
File app/layout.tsx:
import '@/styles/globals.css';
import type { Metadata } from 'next';
import { Inter } from 'next/font/google';
const inter = Inter({ subsets: ['latin'] });
export const metadata: Metadata = {
title: 'Next.js 14 – Demo App',
description: 'Contoh implementasi App Router, Server Actions, dan optimasi performa.',
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
{children}
);
}
Catatan: gunakan className dari Google Font untuk mengurangi FOUT (Flash Of Unstyled Text).
7. Membuat Server Action untuk Formulir Kontak
File app/contact/actions.ts (Server Action):
"use server";
import { z } from 'zod';
import { randomUUID } from 'crypto';
import { revalidatePath } from 'next/cache';
const ContactSchema = z.object({
name: z.string().min(2),
email: z.string().email(),
message: z.string().min(10),
});
export async function submitContact(formData: FormData) {
const result = ContactSchema.safeParse({
name: formData.get('name'),
email: formData.get('email'),
message: formData.get('message'),
});
if (!result.success) {
return { error: result.error.format() };
}
// Simulasi penyimpanan ke DB (contoh: Prisma di edge runtime)
const id = randomUUID();
// await prisma.contact.create({ data: { id, ...result.data } });
// Revalidate cache jika ada halaman yang menampilkan daftar kontak
revalidatePath('/contact/thanks');
return { success: true, id };
}
Langkah selanjutnya, buat formulir di app/contact/page.tsx yang memanggil action tersebut.
8. Membuat Halaman Formulir dengan Client Component
"use client";
import { useState } from 'react';
import { submitContact } from './actions';
export default function ContactPage() {
const [status, setStatus] = useState('');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
const formData = new FormData(e.target as HTMLFormElement);
const res = await submitContact(formData);
if (res.error) {
setStatus('Error: ' + JSON.stringify(res.error));
} else {
setStatus('Message sent! ID: ' + res.id);
}
};
return (
Contact Us
{status && {status}
}
);
}
Action dijalankan di server, sehingga kredensial database tidak pernah terekspos ke browser.
9. Menambahkan API Route dengan Edge Runtime
File app/api/health/route.ts:
export const runtime = 'edge';
export async function GET(request: Request) {
return new Response(JSON.stringify({ status: 'ok', timestamp: Date.now() }), {
headers: { 'Content-Type': 'application/json' },
status: 200,
});
}
Gunakan runtime = 'edge' agar fungsi berjalan di Vercel Edge Network atau Cloudflare Workers, menghasilkan latency < 10 ms untuk permintaan healthcheck.
10. Optimasi Performansi – Image, Font, dan Caching
- Image Optimization: gunakan
next/imagedenganloader="custom"yang mengarah ke ImageKit CDN (2026). Contoh:import Image from 'next/image'; - Font Optimization: panggil font via
next/font/google(seperti pada layout) dan aktifkandisplay='swap'secara default. - Cache Header: tambahkan ke
next.config.js:module.exports = { async headers() { return [ { source: '/(.*).js', headers: [{ key: 'Cache-Control', value: 'public, max-age=31536000, immutable' }], }, ]; }, };
11. Deploy ke Vercel (atau Netlify Edge)
- Commit semua perubahan ke repo GitHub.
git init git add . git commit -m "Initial Next.js 14 setup" git branch -M main git remote add origin https://github.com/username/my-next14-app.git git push -u origin main - Buka Vercel, pilih "New Project", hubungkan repo GitHub, dan biarkan Vercel mendeteksi
next.config.jssecara otomatis. - Set environment variables (mis. DATABASE_URL) di dashboard Vercel → Settings → Environment Variables.
- Deploy selesai – aplikasi tersedia di
https://my-next14-app.vercel.app.
12. Best Practice Keamanan
- HTTP‑Only & Secure Cookies untuk session token; konfigurasikan di
api/auth/route.tsdenganSet‑Cookieheader. - Rate Limiting pada edge API menggunakan
@upstash/ratelimit(Redis‑based, serverless ready). - Content Security Policy (CSP) di
next.config.js:headers: async () => [{ source: '/(.*)', headers: [{ key: 'Content-Security-Policy', value: "default-src 'self'; img-src https: data:; script-src 'self' 'unsafe-eval'" }], }],
13. Testing dan CI/CD
Instal Jest dan React Testing Library (versi 2026):
npm i -D jest@30 @testing-library/react@15 @testing-library/jest-dom@6 ts-jest@30
Tambahkan script di package.json:
"test": "jest --coverage",
"test:watch": "jest --watch"
Konfigurasi GitHub Actions (.github/workflows/ci.yml) untuk lint, test, dan deploy:
name: CI
on: [push, pull_request]
jobs:
build:
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
- run: npm test
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-args: '--prod'
working-directory: .
14. Monitoring dan Observability
Gunakan Helicone untuk tracing OpenAI API (jika ada integrasi AI) dan LogRocket untuk session replay. Tambahkan SDK di app/layout.tsx:
import { init as initLogRocket } from '@logrocket/browser';
if (process.env.NODE_ENV === 'production') {
initLogRocket('your-org/your-project');
}
15. Kesimpulan Step‑by‑Step
Dengan mengikuti langkah‑langkah di atas Anda telah memiliki:
- Proyek Next.js 14 lengkap dengan TypeScript, Tailwind, dan linting.
- Server Action yang aman untuk formulir.
- API Edge yang ultra‑fast.
- Optimasi performa (image, font, cache).
- Pipeline CI/CD otomatis ke Vercel.
Selanjutnya, Anda dapat menambahkan fitur AI, micro‑frontend, atau migrasi ke Turborepo untuk monorepo skala besar.
Next.js 14 memberikan fondasi modern bagi developer web di 2026: App Router, Server Actions, dan edge‑first runtime mempercepat time‑to‑market sekaligus memastikan keamanan dan skalabilitas. Ikuti tutorial ini, sesuaikan dengan kebutuhan tim, dan manfaatkan ekosistem React yang terus berkembang untuk membangun aplikasi yang cepat, dapat dipelihara, dan siap produksi.
Tutorial lengkap setup Next.js 14 dengan App Router, Server Actions, edge API, dan best practice keamanan serta performa. Panduan step-by-step 2026 untuk developer web.
Programming,Software Engineering,Web Development,Next.js,React,Server Actions,Edge API,CI/CD
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar