Cara Deploy Vue ke Netlify
Panduan deploy aplikasi Vue ke Netlify: setelan build untuk Vite dan Vue CLI, memperbaiki 404 pada Vue Router, environment variable, form bawaan, dan custom domain.
Aplikasi Vue yang di-build jadi berkas statis cocok sekali dengan Netlify. Prosesnya lima menit — dengan satu langkah yang tidak boleh dilewat kalau kamu memakai Vue Router dalam mode history, yaitu mayoritas project Vue.
Yang perlu disiapkan
- Node.js 20 atau lebih baru — cek dengan
node -v. - Akun Netlify, paket gratis cukup.
- Project Vue yang jalan dengan
npm run devataunpm run serve. - Repositori Git.
Langkah 1: Kenali build tool-mu
| Build tool | Cara mengenali | Folder keluaran |
|---|---|---|
| Vite | Ada vite.config.js | dist |
| Vue CLI | Ada vue.config.js | dist |
Kabar baiknya, keduanya sama-sama menghasilkan dist — jadi setelannya identik.
Vue CLI sudah masuk mode perawatan dan dokumentasi resmi Vue mengarahkan project baru ke Vite. Panduan ini tetap mencakupnya karena banyak project lama memakainya, tapi kalau kamu memulai dari nol, pakai npm create vue@latest yang sudah berbasis Vite.
Langkah 2: Buat netlify.toml
Bikin di root project:
# netlify.toml
[build]
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "20"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
Menaruh konfigurasi di repositori lebih baik daripada mengisinya di dashboard — ikut ter-versi, dan berlaku sama untuk siapa pun yang meng-clone repo.
Langkah 3: Kenapa blok redirect itu wajib
Kalau routermu dibuat dengan createWebHistory() — bawaan Vue Router modern — URL-mu bersih tanpa tanda pagar: /tentang, bukan /#/tentang.
Konsekuensinya, saat halaman di-refresh, browser benar-benar meminta /tentang ke server. Server mencari berkas bernama tentang, tidak menemukannya, dan mengembalikan 404.
Aturan redirect tadi menyuruh Netlify mengembalikan index.html untuk semua rute dengan status 200. Aplikasimu termuat, lalu Vue Router membaca URL dan menampilkan komponen yang benar.
Angka 200 itu penting. Dengan 301, Netlify mengubah alamat di address bar jadi / — dan Vue Router tidak pernah melihat rute aslinya.
Alternatifnya, pakai createWebHashHistory() yang tidak butuh konfigurasi server sama sekali. Tapi URL-mu jadi mengandung #, dan mesin pencari memperlakukan bagian setelah tanda pagar sebagai bagian dari halaman yang sama — buruk untuk SEO. Untuk situs publik, tetap pakai createWebHistory() plus aturan redirect.
Langkah 4: Hubungkan repositori
- Push project-mu ke GitHub, GitLab, atau Bitbucket.
- Di dashboard Netlify, klik Add new site lalu Import an existing project.
- Pilih repositorimu.
- Netlify membaca
netlify.tomldan mengisi setelannya sendiri. - Klik Deploy site.
Situsmu live di alamat acak yang bisa diganti lewat Site configuration lalu Change site name. Setiap push berikutnya jadi deploy otomatis.
Langkah 5: Environment variable
Daftarkan di Site configuration lalu Environment variables. Prefiksnya berbeda antara Vite dan Vue CLI:
| Build tool | Prefiks | Cara memakai |
|---|---|---|
| Vite | VITE_ | import.meta.env.VITE_API_URL |
| Vue CLI | VUE_APP_ | process.env.VUE_APP_API_URL |
Nilainya ikut ter-bundle ke JavaScript dan bisa dibaca siapa pun lewat DevTools. Jangan menaruh API key rahasia di sana — aplikasi Vue murni tidak punya sisi server untuk menyembunyikannya. Kalau butuh, pakai Netlify Function sebagai perantara.
Variabel dibaca saat build, jadi setelah menambahkan yang baru jalankan Trigger deploy lalu Clear cache and deploy site.
Langkah 6: Form tanpa backend
Netlify bisa menerima submission form tanpa server. Tapi untuk aplikasi Vue ada satu jebakan: Netlify memindai HTML statis saat deploy, dan form yang dirender Vue di browser tidak akan terdeteksi.
Solusinya, tambahkan form tersembunyi di index.html supaya Netlify melihatnya saat build:
<form name="kontak" netlify hidden>
<input type="text" name="nama">
<input type="email" name="email">
<textarea name="pesan"></textarea>
</form>
Lalu di komponen Vue-mu, kirim datanya sebagai POST ke root situs:
async function kirim() {
await fetch('/', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
'form-name': 'kontak',
nama: form.nama,
email: form.email,
pesan: form.pesan
}).toString()
});
}
Nilai form-name harus sama persis dengan atribut name di form tersembunyi tadi.
Langkah 7: Pasang domain sendiri
Buka Domain management lalu Add a domain. Cara paling mudah adalah memindahkan nameserver ke Netlify DNS, karena domain root ditangani otomatis. Sertifikat SSL diterbitkan otomatis setelah DNS terverifikasi.
Detailnya ada di panduan custom domain dan SSL.
Masalah yang sering muncul
404 saat refresh
Aturan redirect belum ada atau statusnya bukan 200. Cek juga apakah netlify.toml benar-benar ter-commit — ini lebih sering terjadi daripada dugaan.
Halaman putih tanpa error
Buka Console. Kalau penuh 404 untuk berkas .js dan .css, kemungkinan besar base di vite.config.js diisi nilai yang tidak sesuai. Untuk situs di root domain, nilainya harus /.
Build gagal padahal jalan di lokal
Kapitalisasi nama berkas — Linux membedakan MyComponent.vue dan mycomponent.vue, laptopmu tidak. Periksa semua impor komponenmu.
Error "Failed to resolve component"
Biasanya juga soal kapitalisasi, atau komponen yang didaftarkan dengan nama berbeda dari nama berkasnya. Konsisten pakai PascalCase untuk nama berkas komponen.
Aset di folder public tidak muncul
Berkas di public/ disalin apa adanya, jadi rujuk dengan path absolut /logo.png. Untuk aset yang ikut diproses build, taruh di src/assets/ dan impor:
import logo from '@/assets/logo.png';
Batas paket gratis Netlify
| Hal | Batas |
|---|---|
| Bandwidth | 100 GB per bulan |
| Menit build | 300 per bulan |
| Submission form | 100 per bulan |
| Jumlah situs | Tidak dibatasi |
Ringkasan
| Hal | Nilainya |
|---|---|
| Build command | npm run build |
| Publish directory | dist (Vite maupun Vue CLI) |
| Prefiks env | VITE_ atau VUE_APP_ |
| Fallback SPA | Redirect /* ke /index.html status 200 |
| Form Vue | Form tersembunyi di index.html + POST manual |
Kalau aplikasimu butuh render sisi server atau SEO yang lebih kuat, pertimbangkan Nuxt — lihat cara deploy Nuxt ke Vercel. Untuk gambaran menyeluruh, mulai dari panduan lengkap deploy website.