Next.js 14 menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini menjelaskan cara menginstal, mengkonfigurasi, dan mengoptimalkan proyek Next.js 14 dengan App Router, Server Actions, dan best practice security serta performance.
1. Prasyarat dan Persiapan Lingkungan
Sebelum memulai, pastikan Anda memiliki:
- Node.js v20.10 atau lebih baru (download di nodejs.org)
- npm v10 atau Yarn v2+ (pilih salah satu)
- Git untuk version control
- Editor kode – VS Code direkomendasikan dengan ekstensi
ESLint,Prettier, danTailwind CSS IntelliSense
2. Membuat Proyek Next.js 14 Baru
npx create-next-app@latest my-next14-app --experimental-app-router --ts
cd my-next14-app
Flag --experimental-app-router otomatis menyiapkan struktur app/ (App Router) dan TypeScript. Jika Anda lebih suka JavaScript, hilangkan --ts.
2.1. Memeriksa Versi
node -v # harus >=20.10
npm -v # atau yarn -v
Jika versi tidak sesuai, upgrade dengan nvm install 20 && nvm use 20.
3. Instalasi Dependency Utama
Kami akan menambahkan beberapa paket yang menjadi praktik umum pada 2026:
tailwindcss@^3.4– utility‑first CSS@auth0/nextjs-auth0@^4.2– otentikasi OAuthzod@^3.23– schema validation untuk Server Actionsnext‑secure‑headers@^2.0– header security default
# dengan npm
npm i -D tailwindcss postcss autoprefixer
npm i @auth0/nextjs-auth0 zod next-secure-headers
# atau dengan Yarn
yarn add -D tailwindcss postcss autoprefixer
yarn add @auth0/nextjs-auth0 zod next-secure-headers
4. Konfigurasi Tailwind CSS
npx tailwindcss init -p
File tailwind.config.js otomatis dibuat. Ubah content agar mencakup folder app:
module.exports = {
content: [
"./app/**/*.{js,ts,jsx,tsx}",
"./pages/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}"
],
theme: {
extend: {},
},
plugins: [],
};
Tambahkan directive Tailwind ke app/globals.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
5. Mengamankan Aplikasi dengan next‑secure‑headers
Buat file middleware.ts di root proyek:
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { secureHeaders } from 'next-secure-headers';
export function middleware(request: NextRequest) {
const response = NextResponse.next();
response.headers.set('Content-Security-Policy', secureHeaders().contentSecurityPolicy);
// tambahkan header lain secara otomatis
Object.entries(secureHeaders()).forEach(([key, value]) => {
response.headers.set(key, value as string);
});
return response;
}
export const config = {
matcher: '/:path*', // berlaku pada semua route
};
Middleware akan dijalankan pada setiap request, menambahkan header security terbaru (HSTS, X‑Content‑Type‑Options, dll).
6. Membuat API Route dengan Server Actions
Server Actions memungkinkan Anda mengeksekusi fungsi server langsung dari komponen React tanpa menulis API route terpisah.
6.1. Definisikan Action
// app/actions/contact.ts
import { z } from 'zod';
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 parsed = ContactSchema.safeParse({
name: formData.get('name'),
email: formData.get('email'),
message: formData.get('message'),
});
if (!parsed.success) {
return { error: parsed.error.format() };
}
// Simulasi penyimpanan ke DB atau panggilan webhook
await new Promise(r => setTimeout(r, 500));
// Re‑validasi halaman bila diperlukan
revalidatePath('/contact');
return { success: true };
}
6.2. Menggunakan Action di Komponen
// app/contact/page.tsx
'use client';
import { useState } from 'react';
import { submitContact } from '@/app/actions/contact';
export default function ContactPage() {
const [status, setStatus] = useState('');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
const form = e.target as HTMLFormElement;
const result = await submitContact(new FormData(form));
if (result.error) {
setStatus('Error: ' + JSON.stringify(result.error));
} else {
setStatus('Message sent!');
form.reset();
}
};
return (
Contact Us
{status && {status}
}
);
}
Catatan: Karena Server Actions masih experimental di Next.js 14, pastikan next.config.js memiliki experimental: { serverActions: true }.
7. Menambahkan Otentikasi dengan Auth0
Langkah cepat:
- Buat aplikasi di Auth0 Dashboard dengan tipe "Single Page Application".
- Catat
DOMAINdanCLIENT_ID. - Tambahkan variabel lingkungan ke
.env.local:
AUTH0_SECRET=your_random_256_bit_base64
AUTH0_BASE_URL=http://localhost:3000
AUTH0_ISSUER_BASE_URL=https://YOUR_DOMAIN.auth0.com
AUTH0_CLIENT_ID=YOUR_CLIENT_ID
Integrasi di pages/_app.tsx (atau app/layout.tsx bila memakai App Router):
import { UserProvider } from '@auth0/nextjs-auth0';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
Gunakan useUser hook di komponen untuk menampilkan status login.
8. Optimasi Performa
- Image Optimization: gunakan
next/imagedenganfillatauresponsive. Pastikannext.config.jsmemilikiimages: { domains: ['images.unsplash.com'] }. - Static Generation (SSG) vs Server‑Side Rendering (SSR): halaman yang tidak memerlukan data per‑request gunakan
export const revalidate = 3600;untuk ISR. - CSS‑in‑JS vs Tailwind: Tailwind menghasilkan CSS yang hanya berisi kelas yang dipakai, mengurangi ukuran bundle.
- Bundle Analyzer: install
next-bundle-analyzeruntuk memeriksa ukuran chunk.
Contoh ISR
// app/blog/[slug]/page.tsx
export const revalidate = 60; // refresh tiap menit
export default async function Post({ params }: { params: { slug: string } }) {
const post = await fetch(`https://cms.example.com/api/posts/${params.slug}`);
const data = await post.json();
return ( ... );
}
9. CI/CD dengan GitHub Actions & Docker
Berikut workflow dasar yang membangun Docker image, menjalankan lint, dan deploy ke Vercel (atau Railway).
# .github/workflows/ci.yml
name: CI & Deploy
on:
push:
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'
- name: Install dependencies
run: npm ci
- name: Lint & TypeCheck
run: |
npm run lint
npm run type-check
- name: Build
run: npm run build
- name: Build Docker image
run: |
docker build -t ghcr.io/${{ github.repository }}:${{ github.sha }} .
- name: Push Docker image
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy to Vercel
uses: amondnet/vercel-action@v20
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-args: '--prod'
working-directory: .
10. Testing dengan Jest & React Testing Library
# install testing libs
npm i -D jest @testing-library/react @testing-library/jest-dom @types/jest ts-jest
# jest.config.js
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
moduleNameMapper: {
'^@/(.*)
Next.js 14 menyatukan kemudahan pengembangan front‑end dengan kekuatan backend modern melalui App Router dan Server Actions. Dengan mengikuti tutorial ini, Anda tidak hanya menghasilkan aplikasi yang cepat, aman, dan teruji, tetapi juga menyiapkan fondasi yang skalabel untuk fitur-fitur AI, realtime, atau micro‑frontend di masa depan. Selamat membangun!
Tutorial step‑by‑step cara setup Next.js 14 dengan App Router, Server Actions, Tailwind, Auth0, CI/CD, dan best practice keamanan serta performa. Cocok untuk developer Programming, Software Engineering, dan Web Development pada 2026.
Programming,Software Engineering,Web Development,Next.js,React,Server Actions,App Router
#Programming #SoftwareEngineering #WebDev #Tech #Coding
: '/$1',
},
};
# contoh test
// __tests__/Contact.test.tsx
import { render, screen, fireEvent } from '@testing-library/react';
import ContactPage from '@/app/contact/page';
test('renders contact form', () => {
render( );
expect(screen.getByPlaceholderText('Name')).toBeInTheDocument();
expect(screen.getByPlaceholderText('Email')).toBeInTheDocument();
});
11. Deploy ke Vercel (atau Railway)
- Push repository ke GitHub.
- Buka vercel.com dan import project.
- Pastikan variabel lingkungan (.env) disinkronkan.
- Vercel otomatis mendeteksi
next.config.jsdan mengaktifkan Serverless Functions untuk Server Actions.
Setelah selesai, aplikasi akan tersedia di URL https://my-next14-app.vercel.app.
12. Penutup & Next Steps
Anda kini memiliki proyek Next.js 14 yang lengkap: App Router, Tailwind, Server Actions, Auth0, security headers, CI/CD, dan testing. Selanjutnya, eksplorasi:
- Edge Runtime untuk latency ultra‑rendah.
- React Server Components (RSC) yang kini stabil di Next.js 14.
- Integrasi dengan Vector DB (e.g., Pinecone) untuk pencarian semantik.
{{ $json.conclusion }}
{{ $json.seo.meta_description }}
{{ $json.seo.keywords }}
{{ $json.hashtags }}
0 Komentar