|
| 1 | +--- |
| 2 | +description: 'Memilih backend rendering untuk aplikasi desktop Deserve, membangun bundle platform seperti app, dmg, msi, dan AppImage, mengompilasi-silang ke target lain dari satu host, serta menandatangani kode bundle macOS.' |
| 3 | +--- |
| 4 | + |
| 5 | +# Backend dan Distribusi |
| 6 | + |
| 7 | +> **Referensi**: [Backend Deno Desktop](https://docs.deno.com/runtime/desktop/backends/) |
| 8 | +
|
| 9 | +Langkah terakhir mengubah proyek menjadi bundle siap kirim. Pilihan backend menentukan cara halaman dirender dan apakah DevTools tersedia, ekstensi keluaran menentukan format paket, dan satu host bisa mengompilasi-silang untuk tiap target. Server Deserve tetap sama di sepanjang itu, karena distribusi adalah urusan pengemasan. |
| 10 | + |
| 11 | +## Memilih Backend |
| 12 | + |
| 13 | +Field `backend`, atau flag `--backend`, memilih engine rendering yang dipanggang ke bundle. Tiga opsi ada, dan hanya dua yang cocok untuk aplikasi Deserve: |
| 14 | + |
| 15 | +| Backend | Rendering | Ukuran | DevTools | Cocok Deserve | |
| 16 | +| --------- | ---------------------------------- | --------------- | -------- | ------------- | |
| 17 | +| `webview` | Webview OS, default | Kecil | Tidak | Ya | |
| 18 | +| `cef` | Chromium terbundel | Besar, ~150 MB | Ya | Ya | |
| 19 | +| `raw` | Tanpa engine web | Terkecil | Tidak | Tidak | |
| 20 | + |
| 21 | +Backend `webview` memakai engine OS, WKWebView di macOS, WebView2 di Windows, WebKitGTK di Linux. Ia menjaga bundle kecil dan merender halaman Deserve dengan baik, dengan harga perbedaan rendering antar platform. |
| 22 | + |
| 23 | +Backend `cef` membundel Chromium untuk rendering identik di mana-mana dan DevTools penuh, sebagai gantinya unduhan jauh lebih besar. Binary framework diunduh sekali dan tercache. |
| 24 | + |
| 25 | +Backend `raw` tidak punya webview sama sekali, jadi UI Deserve yang disajikan lewat HTTP tak punya apa pun untuk merendernya. Build berhasil dan server tetap berjalan, tetapi tak ada halaman muncul. Sisihkan `raw` untuk aplikasi yang menggambar permukaannya sendiri, bukan untuk UI web. |
| 26 | + |
| 27 | +```json |
| 28 | +{ |
| 29 | + "desktop": { |
| 30 | + "backend": "webview" |
| 31 | + } |
| 32 | +} |
| 33 | +``` |
| 34 | + |
| 35 | +Flag `--backend` menimpa field untuk satu build dan hanya menerima `cef` serta `webview`. Memilih `raw` terjadi lewat field. Beralih antara `cef` dan `webview` tak butuh perubahan kode, karena API jendela, menu, dan event yang sama bekerja di keduanya. |
| 36 | + |
| 37 | +## DevTools |
| 38 | + |
| 39 | +DevTools menempel ke halaman untuk memeriksa elemen, konsol, dan panel jaringan. Ia hanya tersedia pada backend `cef`. Backend `webview` default berbicara protokol inspektor berbeda yang belum dituju DevTools terpadu, jadi [`win.openDevtools()`](https://docs.deno.com/api/deno/~/Deno.BrowserWindow.openDevtools) tak berefek di sana. |
| 40 | + |
| 41 | +Build yang butuh DevTools beralih ke `cef` untuk pengembangan, lalu mengirim pada backend mana pun yang cocok untuk rilis: |
| 42 | + |
| 43 | +```bash |
| 44 | +# Jalankan dengan Chromium untuk DevTools |
| 45 | +deno desktop --backend cef --include routes --include views main.ts |
| 46 | +``` |
| 47 | + |
| 48 | +Sisi Deno menjalankan inspektor di bawah `--inspect` apa pun backend-nya, jadi debugging sisi server tetap tersedia bahkan di `webview`. Alur inspektor lengkap ada di [referensi DevTools](https://docs.deno.com/runtime/desktop/devtools/). |
| 49 | + |
| 50 | +## Format Keluaran |
| 51 | + |
| 52 | +Ekstensi keluaran menentukan paket yang dihasilkan build. Blok `output` mengatur jalur per platform, dan flag [`--output`](https://docs.deno.com/runtime/desktop/distribution/) menimpanya untuk satu build: |
| 53 | + |
| 54 | +```json |
| 55 | +{ |
| 56 | + "desktop": { |
| 57 | + "output": { |
| 58 | + "macos": "./dist/DeserveDesktop.app", |
| 59 | + "windows": "./dist/DeserveDesktop", |
| 60 | + "linux": "./dist/deserve-desktop" |
| 61 | + } |
| 62 | + } |
| 63 | +} |
| 64 | +``` |
| 65 | + |
| 66 | +Tiap platform menerima beberapa ekstensi: |
| 67 | + |
| 68 | +| Platform | Ekstensi | Menghasilkan | |
| 69 | +| -------- | ------------- | ---------------------------------- | |
| 70 | +| macOS | `.app` | Bundle aplikasi, default | |
| 71 | +| macOS | `.dmg` | Image disk seret-ke-Applications | |
| 72 | +| Windows | direktori | Folder aplikasi dengan peluncur | |
| 73 | +| Windows | `.msi` | Paket Windows Installer | |
| 74 | +| Linux | direktori | Folder aplikasi dengan peluncur | |
| 75 | +| Linux | `.AppImage` | Bundle portabel file tunggal | |
| 76 | +| Linux | `.deb` | Paket Debian atau Ubuntu | |
| 77 | +| Linux | `.rpm` | Paket Fedora atau RHEL | |
| 78 | + |
| 79 | +`.dmg` memanggil `hdiutil`, jadi ia harus dibangun di host macOS. Sisanya dirakit dalam Rust murni dan dibangun dari host mana pun: |
| 80 | + |
| 81 | +```bash |
| 82 | +# Bangun image disk seret-ke-Applications |
| 83 | +deno desktop --include routes --include views --output ./dist/DeserveDesktop.dmg main.ts |
| 84 | +``` |
| 85 | + |
| 86 | +## Kompilasi-Silang |
| 87 | + |
| 88 | +Satu host membangun untuk tiap target yang didukung. `--target` menamai satu triple, dan `--all-targets` mencakup semuanya. CLI mengunduh runtime dan arsip backend yang cocok untuk target, tanpa toolchain platform di host: |
| 89 | + |
| 90 | +```bash |
| 91 | +# Bangun untuk macOS Intel dari host mana pun |
| 92 | +deno desktop --target x86_64-apple-darwin --include routes --include views main.ts |
| 93 | +``` |
| 94 | + |
| 95 | +Triple yang didukung adalah `aarch64-apple-darwin`, `x86_64-apple-darwin`, `x86_64-pc-windows-msvc`, `aarch64-unknown-linux-gnu`, dan `x86_64-unknown-linux-gnu`. Satu-satunya pengecualian untuk pembangunan-silang bebas-host adalah `.dmg` macOS, yang butuh `hdiutil` dan karenanya host macOS. Matriks lengkap dan contoh CI ada di [referensi distribusi](https://docs.deno.com/runtime/desktop/distribution/). |
| 96 | + |
| 97 | +## Mengompresi Bundle |
| 98 | + |
| 99 | +`--compress` mengirim bundle swa-ekstrak. Muatan runtime berat dikompresi di aplikasi terdistribusi dan dibongkar ke folder per-pengguna saat jalan pertama, yang mengecilkan unduhan sebagai ganti satu kali dekompresi: |
| 100 | + |
| 101 | +```bash |
| 102 | +# Unduhan lebih kecil, bongkar saat jalan pertama |
| 103 | +deno desktop --compress --include routes --include views main.ts |
| 104 | +``` |
| 105 | + |
| 106 | +Codec default ke pengaturan artefak-lebih-kecil dan bisa dipilih dengan `--compress=xz` atau `--compress=zstd`, di mana `zstd` menukar sebagian ukuran demi jalan pertama lebih cepat. |
| 107 | + |
| 108 | +## Penandatanganan Kode |
| 109 | + |
| 110 | +Di macOS, `deno desktop` menandatangani bundle dengan sendirinya. Default-nya adalah tanda tangan ad-hoc, ditulis sebagai `-`, yang memberi aplikasi identitas kode stabil, cukup agar OS memberi [izin notifikasi](/id/recipes/desktop/notifications-updates#syarat-di-macos), tetapi tidak cukup untuk didistribusikan tanpa peringatan Gatekeeper: |
| 111 | + |
| 112 | +```json |
| 113 | +{ |
| 114 | + "desktop": { |
| 115 | + "macos": { |
| 116 | + "codesignIdentity": "-" |
| 117 | + } |
| 118 | + } |
| 119 | +} |
| 120 | +``` |
| 121 | + |
| 122 | +Identitas Developer ID asli menggantikan `-` dan menghasilkan bundle yang dapat dinotarisasi, ditandatangani dengan Hardened Runtime. Notarisasi tetap langkah terpisah yang dijalankan dengan `xcrun notarytool`. Penandatanganan berjalan di host macOS, karena ia memanggil `codesign`. Detail penandatanganan dan notarisasi ada di [referensi distribusi](https://docs.deno.com/runtime/desktop/distribution/#code-signing). |
| 123 | + |
| 124 | +## Kembali ke Peta |
| 125 | + |
| 126 | +Itu menutup lingkaran dari build pertama menuju bundle terkirim. [Ringkasan](/id/recipes/desktop/overview#kompatibilitas-fitur) menyimpan peta kompatibilitas untuk seluruh permukaan, dan server Deserve produksi di luar konteks desktop dibahas di [Deploy Produksi](/id/recipes/production-deploy). |
0 commit comments