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