Next.js 14 menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini membimbing Anda langkah demi langkah menginstal, mengonfigurasi, menulis kode contoh, serta menerapkan best practice untuk performa, keamanan, dan CI/CD pada lingkungan produksi tahun 2026.
1. Prasyarat dan Persiapan Lingkungan
Pastikan sistem Anda sudah terpasang:
- Node.js 20.12.x atau lebih baru (LTS)
- npm 10.5.x atau yarn 4
- Git untuk kontrol versi
- Docker Desktop 4.30+ (opsional untuk container)
Verifikasi dengan:
node -v
npm -v
git --version
2. Instalasi Next.js 14
Gunakan create-next-app yang sudah ter‑integrasi dengan app/ router secara default.
npx create-next-app@latest my-next14-app --ts --experimental-app-router
Perintah di atas menghasilkan proyek TypeScript dengan struktur baru:
my-next14-app/
├─ app/ # App Router (pages/ sudah deprecated)
├─ public/
├─ src/
│ └─ ...
├─ next.config.mjs
└─ package.json
3. Konfigurasi Dasar pada next.config.mjs
Tambahkan pengaturan penting untuk produksi tahun 2026:
import eslintPlugin from 'eslint-plugin-next';
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
swcMinify: true,
experimental: {
serverActions: true, // Server Actions resmi di Next 14
appDir: true,
},
images: {
remotePatterns: [{
protocol: 'https',
hostname: 'images.unsplash.com',
}],
},
i18n: {
locales: ['en-US', 'id-ID'],
defaultLocale: 'id-ID',
},
webpack: (config) => {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
return config;
},
};
export default nextConfig;
4. Membuat Layout Global dengan Server Component
Buat app/layout.tsx yang memakai Server Component untuk load data secara langsung dari API.
import './globals.css';
import type { Metadata } from 'next';
import Navbar from '@/components/Navbar';
export const metadata: Metadata = {
title: 'Next.js 14 Demo',
description: 'Demo aplikasi dengan App Router & Server Actions',
};
export default async function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
// Contoh fetch data statik pada server side
const res = await fetch('https://api.github.com/repos/vercel/next.js', {
next: { revalidate: 3600 }, // ISR 1 jam
});
const repo = await res.json();
return (
{children}
);
}
5. Implementasi Server Action pada Formulir
Server Actions memungkinkan Anda mengeksekusi kode server langsung dari komponen React tanpa API route terpisah.
"use server";
export async function addMessage(formData: FormData) {
const name = formData.get('name') as string;
const message = formData.get('message') as string;
await fetch('https://example.com/api/messages', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name, message }),
});
}
Gunakan di komponen client:
"use client";
import { addMessage } from '@/app/actions';
export default function Guestbook() {
return (
);
}
6. Optimasi Gambar dengan next/image dan Remote Patterns
Next.js 14 memperkenalkan next/future/image yang menggunakan browser native lazy‑loading bila didukung.
import Image from 'next/future/image';
export default function Hero() {
return (
);
}
7. Penambahan TypeScript Strict Mode
Ubah tsconfig.json untuk mengaktifkan strict dan noUncheckedIndexedAccess yang kini menjadi best practice dalam Software Engineering.
{
"compilerOptions": {
"target": "es2022",
"module": "esnext",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": false,
"skipLibCheck": true,
"strict": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noUncheckedIndexedAccess": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"jsx": "preserve",
"incremental": true
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
8. CI/CD dengan GitHub Actions + Docker
Berikut workflow .github/workflows/ci.yml yang membangun image Docker, menjalankan test, lalu deploy ke Vercel (atau platform apapun) secara otomatis.
name: CI & Deploy
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Install dependencies
run: npm ci
- name: Lint & Type Check
run: |
npm run lint
npm run type-check
- name: Run Tests
run: npm test -- --coverage
- name: Build Docker image
run: |
docker build -t ghcr.io/${{ github.repository }}:sha-${{ github.sha }} .
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
docker push ghcr.io/${{ github.repository }}:sha-${{ github.sha }}
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-args: '--prod'
working-directory: .
github-token: ${{ secrets.GITHUB_TOKEN }}
9. Security Best Practices
- Content Security Policy (CSP) – tambahkan header di
next.config.mjsatau lewat middleware.export function middleware(request) { const response = NextResponse.next(); response.headers.set('Content-Security-Policy', "default-src 'self'; img-src https: data:; script-src 'self' 'unsafe-inline';"); return response; } - Rate limiting dengan
next-rate-limit(versi 2.x) pada API routes yang masih diperlukan. - Environment variables disimpan di Vercel/Netlify secrets; jangan commit
.env.localke repo.
10. Performance Monitoring dan Alpha Edge Runtime
Next.js 14 memperkenalkan Edge Runtime untuk fungsi serverless ultra‑ringan. Ubah API route menjadi:
export const runtime = 'edge';
export async function GET(request) {
return new Response(JSON.stringify({status: 'ok'}), {status: 200});
}
Integrasikan dengan LogRocket atau Vercel Analytics untuk real‑time Web Vitals.
11. Deploy ke Produksi
Jika menggunakan Vercel:
- Push commit ke branch
main. - Vercel secara otomatis men-trigger workflow di atas.
- Set environment variables di dashboard Vercel (NEXT_PUBLIC_API_URL, DATABASE_URL, dsb).
Jika menggunakan Kubernetes, buat deployment.yaml dan service.yaml dengan image yang dipush ke GitHub Container Registry, lalu apply dengan kubectl apply -f.
12. Troubleshooting Umum
- “Error: Cannot find module '@svgr/webpack'” – jalankan
npm i -D @svgr/webpack. - ISR tidak bekerja – pastikan header
Cache-Controltidak di‑override oleh CDN. - Server Actions menampilkan 405 – pastikan form menggunakan
method="POST"dan tidak adaactionHTML lain yang menimpa.
Dengan mengikuti langkah di atas, Anda memiliki aplikasi Next.js 14 yang modern, scalable, dan siap produksi pada tahun 2026.
Next.js 14 menyatukan kemudahan pengembangan React dengan kekuatan server‑side rendering, Server Actions, dan integrasi DevOps modern. Dengan mengikuti tutorial ini, Anda tidak hanya menguasai instalasi dan konfigurasi dasar, tetapi juga menerapkan best practice keamanan, performance, dan CI/CD yang relevan untuk Software Engineering serta Web Development di era 2026. Mulailah proyek Anda, deploy ke Vercel atau Kubernetes, dan nikmati pengembangan yang lebih cepat serta pengalaman pengguna yang optimal.
Panduan langkah demi langkah setup Next.js 14 dengan App Router, Server Actions, Docker CI/CD, serta best practice keamanan dan performance untuk tahun 2026.
Programming,Software Engineering,Web Development,Next.js 14,App Router,Server Actions
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar