Episode ini membahas pengaturan project Nuxt: peran nuxt.config.ts, runtime config untuk environment variables, pemisahan config public dan private, konfigurasi modules dan plugins, serta build optimizations dan feature flags untuk mengelola perilaku aplikasi.

Semakin besar project, semakin penting konfigurasi yang terpusat dan aman. Episode 8 membahas cara mengatur Nuxt dengan benar: apa yang hidup di nuxt.config.ts saat build, dan apa yang baru diketahui saat runtime lewat runtime config.
Kesalahan yang paling sering terjadi: menyimpan API key di file frontend, atau mengubah-ubah nuxt.config.ts untuk nilai yang sebenarnya bergantung environment. Setelah episode ini, kalian akan paham kapan memakai apa, dan bagaimana feature flags serta build optimizations bisa dikelola secara terstruktur.
Semua opsi build dan modul tinggal di nuxt.config.ts. Contoh konfigurasi umum untuk project belajar-shop:
export default defineNuxtConfig({
modules: ["@pinia/nuxt", "@nuxt/image"],
css: ["~/assets/css/main.css"],
app: {
head: {
title: "Belajar Shop",
meta: [{ name: "description", content: "Toko contoh belajar Nuxt" }],
},
},
})Opsi app.head mengatur title dan meta tags global yang dirender di setiap halaman. Perubahan di file ini membutuhkan restart dev server, karena dia hanya dibaca saat build dimulai.
runtimeConfig adalah bagian dari nuxt.config.ts yang nilainya bisa diganti saat runtime tanpa rebuild. Nilai di dalamnya dibaca dari environment variables:
export default defineNuxtConfig({
runtimeConfig: {
apiKey: process.env.API_KEY,
public: {
apiBase: process.env.NUXT_PUBLIC_API_BASE || "/api",
},
},
})runtimeConfig dibagi dua: nilai default di public bisa diakses client, dan nilai di luar public hanya tersedia di server. Environment variable otomatis di-override dengan aturan penamaan.
Nuxt membaca environment variables berdasarkan nama. Untuk nilai public, nama variabelnya NUXT_PUBLIC_*; untuk nilai private, NUXT_*:
NUXT_PUBLIC_API_BASE=https://api.belajarshop.dev
NUXT_API_KEY=rahasia-jangan-bocor
NUXT_PUBLIC_SITE_URL=https://belajarshop.devFile .env di atas tidak boleh di-commit ke git — tambahkan ke .gitignore. Perhatikan satu hal penting: variabel tanpa awalan NUXT_ tidak otomatis terbaca oleh Nuxt.
Perbedaan krusial:
config.apiKey. Jangan pernah memakai nilainya di komponen client-side.const config = useRuntimeConfig()
async function getDataEksternal() {
return await $fetch("https://api.eksternal.dev/v1", {
headers: { Authorization: `Bearer ${config.apiKey}` },
})
}config.apiKey di atas hanya boleh dipanggil di kode server — misalnya di server/api. Jika dipanggil di komponen, nilainya menjadi undefined karena tidak dikirim ke client.
Banyak module menerima opsi lewat array dalam modules:
export default defineNuxtConfig({
modules: [
"@nuxt/image",
["@nuxtjs/i18n", { locales: ["id", "en"], defaultLocale: "id" }],
],
})Untuk module dengan banyak opsi, bentuk array ["nama-module", opsi] lebih mudah dibaca. Setiap module mendokumentasikan opsi yang didukungnya.
Plugins Nuxt adalah kode yang dijalankan saat aplikasi diinisialisasi, didefinisikan di app/plugins. Konfigurasi mereka biasanya menyangkut library pihak ketiga yang butuh setup di awal.
Nuxt mengoptimasi build secara otomatis — pembagian code chunks, minifikasi, dan tree-shaking. Kalian bisa ikut mengatur lewat opsi build.transpile untuk library tertentu, atau mengaktifkan eksperimen:
export default defineNuxtConfig({
build: {
transpile: ["beberapa-library"],
},
features: {
inlineStyles: true,
},
})Feature flags memungkinkan fitur diaktifkan atau dinonaktifkan tanpa menulis ulang kode. Kombinasikan runtime config dengan kondisi di komponen:
const config = useRuntimeConfig()
const promoAktif = computed(() => config.public.promoAktif === "true")Nilai config.public.promoAktif berasal dari NUXT_PUBLIC_PROMO_AKTIF di .env. Ubah nilai env, restart, dan fitur promo langsung berubah tanpa mengubah kode.
Episode 8 menjadikan konfigurasi kalian terpusat dan aman: nuxt.config.ts untuk semua yang diketahui saat build, runtime config untuk nilai yang berubah saat runtime, pemisahan tegas antara config public dan private, serta feature flags yang dikendalikan lewat environment variables.
Inti yang harus dibawa pulang:
nuxt.config.ts adalah satu-satunya sumber kebenaran konfigurasi build.runtimeConfig menggabungkan nilai statis dengan environment variables.NUXT_PUBLIC_, private memakai NUXT_.Di episode 9 selanjutnya kita akan membahas images dan assets — optimasi gambar dengan @nuxt/image, pengelolaan static assets dan folder public, responsive images dengan lazy loading, serta strategi media optimization untuk performa. Toko kalian akan tampil tajam dan cepat.