Lompat ke konten
Kembali ke modul

Merilis, dan Bekerja Sebagai Developer · 1/8

Dari build sampai ter-deploy

Apa yang dihasilkan `next build`, apa yang dilakukan server dengannya, dan bagaimana deploy sebenarnya terjadi.

Baca 28 menit

Setelah pelajaran ini kamu bisa

  • Menyebutkan apa yang dihasilkan sebuah build dan apa yang sebenarnya disajikan
  • Menjelaskan bedanya perilaku dev dan production
  • Menjelaskan apa yang terjadi selama proses deploy
  • Melakukan rollback dengan aman saat deploy bermasalah

bun run dev dan bun run build menghasilkan hal yang sangat berbeda. Dev mengoptimalkan siklus umpan balikmu; build mengoptimalkan penggunamu. Mencampuradukkan keduanya adalah sebab "di dev jalan kok" jadi kalimat yang begitu umum.

DevelopmentBuild production
Meng-compileSesuai kebutuhan, per fileSemuanya, sekali, di awal
KodeBisa dibaca, nama masih utuhTerminifikasi dan dikaburkan
ErrorPesan lengkap dan stack traceDisembunyikan, diganti sebuah digest
ReactPemeriksaan tambahan, effect dipanggil dua kaliTidak ada keduanya
CachingSebagian besar dimatikanSepenuhnya aktif
Halaman statisDi-render per requestDi-render sekali saat build
KecepatanCepat mulai, lebih lambat per halamanLambat di-build, cepat disajikan

Ini yang benar-benar dihasilkan build proyek ini, terukur. bun run build meng-compile dalam 5,4 detik, type-check dalam 3,1 detik, dan mem-prerender 231 route jadi 226 file HTML. Direktori .next totalnya 117 MB — dan .next/static, satu-satunya bagian yang diunduh browser, cuma 1,1 MB dalam 18 chunk.

Coba sendiri

Membaca tabel route. Setiap simbol menyiratkan biaya yang berbeda saat request.

Hasil

Tekan Jalankan untuk melihat hasilnya.

Ini jalan di browser kamu, di dalam sandbox. Apa pun yang kamu tulis di sini tidak bisa merusak situs.

Apa yang dilakukan sebuah deploy

  1. Install dependency dari lockfile, tepat.
  2. Jalankan pemeriksaannya — lint, type, test. Kegagalan di sini menghentikan deploy-nya, dan itu memang tujuannya.
  3. Build output production-nya.
  4. Jalankan migration, kalau skemanya berubah. Sebelum kode barunya, dan harus kompatibel ke belakang.
  5. Jalankan versi baru berdampingan dengan yang lama.
  6. Periksa kesehatannya, lalu alihkan lalu lintasnya.
  7. Hentikan versi lama begitu tidak ada yang memakainya.

Melakukan rollback

Sesuatu pasti akan bermasalah di production. Ukuran penyiapan deploy yang baik bukan bahwa ia tidak pernah gagal — tapi seberapa cepat kamu bisa membatalkannya.

  • Ketahui perintah rollback-nya sebelum kamu membutuhkannya. Bukan jam 2 pagi, saat pengguna sedang mengeluh.
  • Kode bisa di-rollback; data tidak. Migration yang membuang sebuah kolom tidak bisa dibatalkan dengan deploy ulang. Itu sebabnya kamu membuang kolom di rilis yang *lebih belakangan* dari kode yang berhenti memakainya.
  • Utamakan perbaikan maju untuk hal kecil, dan rollback untuk apa pun yang belum kamu pahami. Pemahaman bisa menunggu; gangguan layanannya tidak.
  • Deploy kecil dan sering. Deploy yang memuat satu perubahan sangat mudah didiagnosis. Yang memuat tiga minggu pekerjaan jadi sebuah investigasi.

Tugas praktik

Jalankan bun run build di proyek ini dan baca tabel route-nya. Hitung simbol ● dan ƒ-nya. Lalu jalankan du -sh .next dan du -sh .next/static lalu bandingkan kedua angkanya. Terakhir jalankan bun run start dan buka sebuah halaman — sekarang kamu menyajikan build production, dengan kode terminifikasi dan pesan error yang disembunyikan.

Hasil yang diharapkan

Total sekitar 117M, static sekitar 1,1M, dan server production yang berfungsi.