Memulai
-
Instal paket
Terminal window npm i @capgo/capacitor-live-reloadTerminal window pnpm add @capgo/capacitor-live-reloadTerminal window yarn add @capgo/capacitor-live-reloadTerminal window bun add @capgo/capacitor-live-reload -
Sinkronkan dengan project native
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync
Konfigurasi server dev Vite Anda agar berfungsi dengan live reload. Anda perlu:
- Nonaktifkan klien HMR bawaan
- Teruskan event reload melalui endpoint WebSocket khusus
Penggunaan
Section titled âPenggunaanâimport { LiveReload } from '@capgo/capacitor-live-reload';
// Konfigurasi server devawait LiveReload.configureServer({ url: 'http://localhost:5173', websocketPath: '/capgo-livereload', autoReconnect: true, reconnectInterval: 2000});
// Terhubung ke server devawait LiveReload.connect();
// Dengarkan event reloadLiveReload.addListener('reloadEvent', (event) => { console.log('Event reload:', event); if (event.type === 'full-reload') { console.log('Reload halaman penuh dipicu'); } else if (event.type === 'file-update') { console.log('File diperbarui:', event.file); }});
// Dengarkan perubahan status koneksiLiveReload.addListener('statusChange', (status) => { console.log('Status koneksi:', status.connected); console.log('URL Server:', status.url);});Referensi API
Section titled âReferensi APIâconfigureServer(options)
Section titled âconfigureServer(options)âSimpan pengaturan server dev jarak jauh untuk koneksi berikutnya.
const status = await LiveReload.configureServer({ url: 'http://192.168.1.100:5173', websocketPath: '/capgo-livereload', headers: { 'Authorization': 'Bearer token' }, autoReconnect: true, reconnectInterval: 2000});Parameter:
url(string): URL dasar untuk server dev (mis.,http://dev.local:5173)websocketPath(string, opsional): Override jalur WebSocket (default:/ws)headers(Record<string, string>, opsional): Header tambahan untuk koneksi WebSocketautoReconnect(boolean, opsional): Koneksi ulang otomatis saat terputus (default:true)reconnectInterval(number, opsional): Penundaan antara upaya koneksi ulang dalam ms (default:2000)
Mengembalikan: LiveReloadStatus dengan info koneksi
connect()
Section titled âconnect()âBuat koneksi WebSocket jika belum aktif.
const status = await LiveReload.connect();console.log('Terhubung:', status.connected);Mengembalikan: Status koneksi saat ini
disconnect()
Section titled âdisconnect()âTutup koneksi WebSocket saat ini dan nonaktifkan koneksi ulang otomatis.
await LiveReload.disconnect();getStatus()
Section titled âgetStatus()âDapatkan status koneksi saat ini.
const status = await LiveReload.getStatus();console.log('Terhubung:', status.connected);console.log('URL:', status.url);reload()
Section titled âreload()âPicu secara manual reload penuh Capacitor WebView.
await LiveReload.reload();reloadFile(options)
Section titled âreloadFile(options)âReload satu file/modul (fallback ke reload penuh jika tidak didukung).
await LiveReload.reloadFile({ path: '/src/components/MyComponent.tsx', hash: 'abc123'});addListener(âreloadEventâ, callback)
Section titled âaddListener(âreloadEventâ, callback)âDengarkan event reload yang masuk dari server.
const handle = await LiveReload.addListener('reloadEvent', (event) => { switch (event.type) { case 'full-reload': console.log('Reload penuh diminta'); break; case 'file-update': console.log('File diperbarui:', event.file?.path); break; case 'error': console.error('Error:', event.message); break; }});
// Hapus listener saat selesaiawait handle.remove();addListener(âstatusChangeâ, callback)
Section titled âaddListener(âstatusChangeâ, callback)âDengarkan perubahan status socket.
await LiveReload.addListener('statusChange', (status) => { console.log(status.connected ? 'Terhubung' : 'Terputus');});removeAllListeners()
Section titled âremoveAllListeners()âHapus semua listener yang terdaftar.
await LiveReload.removeAllListeners();Contoh Lengkap
Section titled âContoh Lengkapâimport { LiveReload } from '@capgo/capacitor-live-reload';
export class DevServer { private connected = false;
async initialize() { // Hanya aktifkan dalam development if (process.env.NODE_ENV !== 'development') { return; }
try { // Konfigurasi server await LiveReload.configureServer({ url: 'http://192.168.1.100:5173', websocketPath: '/capgo-livereload', autoReconnect: true, reconnectInterval: 3000 });
// Siapkan listener sebelum terhubung await LiveReload.addListener('reloadEvent', this.handleReloadEvent.bind(this)); await LiveReload.addListener('statusChange', this.handleStatusChange.bind(this));
// Terhubung await LiveReload.connect(); } catch (error) { console.error('Gagal menginisialisasi live reload:', error); } }
private handleReloadEvent(event: any) { console.log('Event reload diterima:', event.type);
switch (event.type) { case 'full-reload': this.performFullReload(); break; case 'file-update': this.handleFileUpdate(event.file); break; case 'error': console.error('Error server:', event.message); break; case 'connected': console.log('Server terhubung'); break; case 'disconnected': console.log('Server terputus'); break; } }
private handleStatusChange(status: any) { this.connected = status.connected; console.log(`Live reload ${status.connected ? 'terhubung' : 'terputus'}`); }
private performFullReload() { console.log('Melakukan reload halaman penuh...'); window.location.reload(); }
private handleFileUpdate(file: any) { console.log('File diperbarui:', file?.path); // HMR akan menangani ini secara otomatis dalam kebanyakan kasus }
async disconnect() { await LiveReload.disconnect(); await LiveReload.removeAllListeners(); this.connected = false; }
isConnected(): boolean { return this.connected; }}Contoh Konfigurasi Vite
Section titled âContoh Konfigurasi ViteâKonfigurasi server Vite Anda agar berfungsi dengan plugin live reload:
import { defineConfig } from 'vite';
export default defineConfig({ server: { host: '0.0.0.0', // Izinkan koneksi dari jaringan port: 5173, hmr: { // Jalur WebSocket kustom untuk live reload path: '/capgo-livereload', } }});Praktik Terbaik
Section titled âPraktik Terbaikâ-
Hanya gunakan dalam development
if (import.meta.env.DEV) {await LiveReload.configureServer({url: 'http://localhost:5173',websocketPath: '/capgo-livereload'});await LiveReload.connect();} -
Gunakan IP lokal Anda untuk pengujian mobile
const devServerUrl = process.env.VITE_DEV_SERVER_URL || 'http://192.168.1.100:5173';await LiveReload.configureServer({ url: devServerUrl }); -
Tangani error koneksi dengan anggun
try {await LiveReload.connect();} catch (error) {console.warn('Tidak dapat terhubung ke server dev, menggunakan build production');} -
Bersihkan saat keluar dari aplikasi
window.addEventListener('beforeunload', async () => {await LiveReload.disconnect();}); -
Tampilkan status koneksi di UI
LiveReload.addListener('statusChange', (status) => {// Tampilkan indikator di build devupdateDevIndicator(status.connected);});
Catatan Platform
Section titled âCatatan Platformâ- Bekerja dengan iOS 11.0+
- Pastikan server dev dapat diakses dari jaringan perangkat Anda
- Mungkin perlu mengkonfigurasi firewall untuk mengizinkan koneksi
Android
Section titled âAndroidâ- Bekerja dengan Android 5.0 (API 21)+
- Gunakan
adb reverseuntuk koneksi localhost:Terminal window adb reverse tcp:5173 tcp:5173
- Dukungan penuh untuk platform web
- Koneksi WebSocket langsung ke server dev Vite
Pemecahan Masalah
Section titled âPemecahan MasalahâKoneksi gagal:
- Verifikasi server dev sedang berjalan
- Periksa bahwa perangkat dan komputer berada di jaringan yang sama
- Pastikan firewall mengizinkan koneksi pada port tersebut
- Gunakan alamat IP sebagai ganti localhost untuk perangkat mobile
Reload lambat:
- Periksa kecepatan jaringan
- Kurangi interval koneksi ulang
- Optimalkan konfigurasi build Vite
Error WebSocket:
- Verifikasi websocketPath cocok dengan konfigurasi Vite
- Periksa konflik port
- Pastikan header benar jika menggunakan autentikasi