Introduzione
Se già hai un'app web progressiva. Funziona nei browser, ha un manifesto e forse utilizza un worker di servizio per il supporto offline. Se ora hai bisogno di distribuzione negli store, API di dispositivo nativo o un miglior percorso di onboarding, migrare a un'app Capacitor è spesso più veloce che ricreare il front-end.
Il vantaggio più grande è che conservi quasi tutto il tuo web code esistente. In molti casi, hai bisogno solo di:
- costruisci asset web di produzione,
- inizializza Capacitor con le giuste
webDir, - aggiungi progetti iOS e Android,
- e collega plugin nativi solo dove necessario.
Se il tuo PWA ha percorsi puliti e logica di componente, ciò può richiedere solo poche ore.
Prerequisiti
Tempo stimato: 2-5 ore, a seconda delle funzionalità specifiche del piattaforma.
- Node.js 18+ con Bun
- Il tuo codice PWA esistente code (React, Vue, Angular, Svelte, ecc.)
- Xcode (per iOS, macOS solo)
- Android Studio (per Android)
- Se hai intenzione di pubblicare per iOS, necessiti di un account di sviluppatore Apple
- Se intendi distribuire per Android, necessiti di un account di sviluppatore Google Play
Passo 1: Controlla la tua PWA prima di avvolgerla in nativo
Prima di eseguire bunx cap init, verifica che la tua app web sia pronta per la produzione:
- Assicurati che la tua PWA abbia uno script di build di produzione (ad esempio
bun run build). - Conferma che il tuo cartello di output web sia deterministico (spesso
dist,buildElimina i redirect assoluti hardcodati che assumono un contesto browser-only.out). - Elimina i redirect assoluti hardcodati che assumono un contesto browser-only.
- Verifica il comportamento del worker di servizio per assicurarsi che sia compatibile con i WebViews mobili:
- Mantieni il supporto offline se aiuta i tuoi utenti.
- Evita le API del browser esclusivo che non sono disponibili nel webview incorporato.
- Conferma le richieste di installazione PWA e l'interfaccia utente specifica del browser che ancora hanno senso. In un'app Capacitor, le richieste di installazione dell'app sono di solito non necessarie.
Passo 2: Adatta i comportamenti del browser solo
Mantieni la tua interfaccia utente dell'app ma blocca la logica del browser solo.
Utilizza un controllo di piattaforma semplice intorno alle richieste di installazione e promemoria:
import { Capacitor } from '@capacitor/core'
const isNative = Capacitor.isNativePlatform()
function registerInstallPrompt() {
if (isNative) return
// existing browser-only install or Web Push code
}
Ciò evita la logica del browser solo che si attiva all'interno del contenitore nativo.
Passo 3: Inizializza Capacitor nella cartella PWA
Dalla tua cartella PWA esistente:
bun add @capacitor/core
bun add -D @capacitor/cli
Esegui Capacitor init con il nome dell'app, l'ID bundle e la directory di output web:
bunx cap init MyPWAApp com.example.my-pwa-app --web-dir dist
Se la cartella di build è build (Create React App) o out (Next.js static export), sostituisci dist.
Aggiungi una configurazione base Capacitor:
import type { CapacitorConfig } from '@capacitor/cli'
const config: CapacitorConfig = {
appId: 'com.example.my-pwa-app',
appName: 'MyPWAApp',
webDir: 'dist',
server: {
iosScheme: 'https',
},
}
export default config
Passo 4: Aggiungi piattaforme native
Installa pacchetti nativi di base e genera cartelle del progetto:
bun add @capacitor/ios @capacitor/android
bunx cap add ios
bunx cap add android
In questo punto Capacitor ha creato ios/ e android/ cartelle. La sincronizzazione copierà i tuoi asset web costruiti in entrambe le piattaforme.
Passo 5: Costruisci l'app web e sincronizza
Costruisci la PWA e sincronizza gli asset web:
bun run build
bunx cap sync
Ora apri i progetti nativi:
bunx cap open ios
bunx cap open android
Dalla Xcode o Android Studio, collega un dispositivo o un emulatore e esegui.
Passo 6: Miglioramenti nativi dopo la migrazione
Ecco dove sostituisci le funzionalità web esclusivamente con API native dove necessario:
- Notifiche push ->
@capacitor/push-notifications - Archiviazione chiave/valore sicura ->
@capacitor/preferences - Camera / media ->
@capacitor/camera - Autenticazione biometrica ->
@capacitor-community/native-biometric(o plugin di scelta)
Per ogni nuovo plugin nativo:
- Installa il pacchetto del plugin
- Configura le impostazioni specifiche del plugin
- Eseguisci:
bunx cap sync
Riavvia e esegui nuovamente.
Passo 7: Verifica della parità degli store
Prima della sottoscrizione:
- Testa i collegamenti profondi e la navigazione (
/e percorsi profondi) su entrambe le piattaforme. - Verifica che lo stato della barra degli strumenti, le aree sicure e l'orientamento siano corretti.
- Elimina i metadati web non utilizzati che confliggono con il comportamento dell'app (ad esempio, promemoria di installazione).
- Mantieni le impostazioni di sicurezza dei trasporti e la privacy coerenti con la tua politica.
- Aggiungi icone/splash per ogni piattaforma.
Se la tua app utilizza aggiornamenti OTA, sincronizza il tuo pipeline di rilascio con una strategia di aggiornamento sicura per la piattaforma nativa e considera Capgo per un rilascio controllato e un rollback.
Elenco di controllo finale
- Costruisce le app web pulitamente (
bun run build) - Capacitor inizializzato con le impostazioni corrette
webDir bunx cap add iosebunx cap add androidcompletato- Le app native funzionano su dispositivi reali
- Le sole code per browser sono limitate per comportamento nativo
- I canali di aggiornamento e gli asset per le app store sono configurati
Hai già fatto la maggior parte del lavoro difficile quando hai costruito la tua PWA. Avvolgendo con Capacitor ti dà:
- La distribuzione sullo store
- L'accesso agli API native
- Una maggiore iterazione senza una completa code ricompilazione
- Un'unica via di distribuzione per i team web e mobili.
Inizia da questo flusso, quindi iterare native-by-native in base alle analisi e alle feedback degli utenti.