2015-08-14 15 views
10

Sto cercando di scrivere un'applicazione React-Native. Voglio poter scaricare nuovi moduli in fase di esecuzione sul dispositivo per estendere le funzionalità. Ci sarebbe una logica di base che sa come richiedere nuovi moduli basati su alcuni moduli di input come un dbs. Non voglio raggruppare tutto in un unico pacchetto monolitico, che è ciò che credo ora accada con il packager integrato.Rottura di un'applicazione React-Native in moduli plug-in

Questo sarebbe qualcosa di simile a come RequireJS funziona nel browser. Quello che devo sapere è:

  1. Come si creano moduli indipendenti? il bundle nativo react non sembra consentirmi di selezionare i moduli radice da utilizzare e funziona solo con il progetto root
  2. Come posso in fase di esecuzione richiedere l'inserimento di nuove funzionalità nell'ambiente JavaScript corrente?

risposta

0

Sono riuscito a ottenere qualcosa di molto simile a questo solo in JS. Per prima cosa ho dovuto esporre qualche altra opzione nell'attuale bundler nativo reattivo, principalmente, l'url (per cambiare il modulo "principale") e le opzioni blacklist (per impedire il raggruppamento reagire-nativo nel secondo pacchetto) al loro packager (http://github.com/facebook/react-native/blob/master/packager/README.md).

Ho quindi dovuto scrivere un fascicolatore personalizzato che scaricava il secondo pacchetto e utilizza eval() per valutarlo nell'ambiente corrente.

L'unico problema è che ho dovuto aggiungere __d('react-native',[],require('react-native')) nel primo pacchetto che penso funzioni come define() da require.js. Questo esporta 'react-native' come un nome senza ambiguità che i moduli che io inserisco possono accedere tramite le normali istruzioni require(). All'inizio è un po 'confuso, ma da quello che posso dire che il packager nativo di React funziona un po' come r.js (vedi http://requirejs.org/docs/optimization.html).

2

L'inizio nativo inizia puntando su un pacchetto JS. Ciò significa che dovresti almeno riavviare l'app per ricaricare il pacchetto js (supponendo che tu lo stia leggendo da un server e non dal dispositivo ios stesso).

Se si dispone di un modo per aggiornare i file js sul server (tramite una sorta di servizio Web aggiornato in base alle cose che l'utente fa), il riavvio dell'app potrebbe teoricamente ricaricare il JS e fornire nuove funzionalità all'app .

+0

Ecco come funziona l'attuale implementazione di React-Native. In realtà non avrei nemmeno bisogno di aggiornare jsbundle dato che già forniscono questo meccanismo tramite il loro packager che viene eseguito quando si avvia la loro app di esempio. Basta salvare il mio modulo di nodo aggiornato, e il packager si riconfezionerà e servirà il nuovo pacchetto per l'app. Quello che stavo cercando era l'abilità di avviare qualcosa come un bootstrapper che potesse quindi richiedere un secondo bundle per aumentare il programma nativo reattivo attualmente in esecuzione. – Bob9630

+0

Per quanto ne so, non è pianificato e sarebbe piuttosto difficile da fare .... Non sono un guru di iOS. – Braden