2013-05-02 8 views
6

Esiste una best practice comunemente accettata per mantenere un file di configurazione disponibile sul lato client (una sorta di equivalente della sezione AppSettings sul lato server in un'applicazione ASP.NET)?Il miglior approccio per il file di configurazione per un'applicazione Angular/RequireJS?

La nostra applicazione è basata su Angolare. Il nostro desiderio è di esternalizzare le impostazioni specifiche dell'ambiente (come gli URL di sistema remoti, ecc.) Dal codice stesso, in modo che idealmente una persona Ops e non uno sviluppatore possano modificare le impostazioni in un unico punto.

Grazie in anticipo per qualsiasi suggerimento!

+1

è possibile mantenere le impostazioni in una configurazione dedicata.js file, la modifica di JSON non è più difficile della modifica di XML – Guillaume86

+1

Per quanto riguarda Angular, forse questa risposta potrebbe ispirarti ulteriormente http://stackoverflow.com/questions/16339595/angular-js-configuration-for-different-enviroments – kfis

risposta

1

Penso che la risposta a questo dipenda molto da come si imposta il livello angolare nella struttura generale dell'applicazione.

Ad esempio, ho presentato un'applicazione angolare allo stesso modo per ogni ambiente dall'applicazione del server di base (Grails, node.js, RoR) e l'applicazione angolare è sempre la stessa base di codice perché i dati che sto alimentando a angolare è controllato dal lato server e le chiamate angolari sono tutte relative all'URL di base. In altre parole, io proxy tutti i dati attraverso l'app del server che serve l'applicazione Angular così tutta l'app angolare "sa" è il proprio URL.

Se si stanno chiamando direttamente altri servizi e non si utilizza l'applicazione del server di base per eseguire il proxy dei dati, è possibile che si possa ancora utilizzare il server per alimentare l'URL in base a qualche configurazione sul lato server dell'applicazione. In questo caso, è sempre possibile memorizzare tali valori di configurazione in una tabella DB in modo da poterli modificare al volo.

1

Ho questo stesso dilemma, e quello che ho fatto ricorso a per ora è: ho una serie di file di configurazione, come config-local.js, config-staging.js, ecc Poi creo un link simbolico a config.js ovunque io voglia eseguire la mia app. Sul mio desktop locale, faccio un collegamento simbolico a config-local.js, nell'env di staging, faccio un collegamento simbolico a config-staging.js. Quindi ho config.js in .gitignore.

Pro: Funziona. Contro: richiede la creazione di collegamenti simbolici prima che l'app funzioni correttamente.

Futuro: Forse aggiungere un'attività in grunt per creare il collegamento simbolico?

3

Non credo sia una buona idea utilizzare un file config.js durante lo sviluppo di applicazioni AngularJS. Il motivo è che si interromperà qualsiasi possibilità di test automatici.

Invece, creo un servizio "Impostazioni" in cui specificano il contesto specifico dell'app. Ad esempio:

angular.module('settings',[]).factory('SettingsService',function(){ 

    var service={}; 

    // Insert your settings here 
    service.ServerPath = 'whateverwhatever'; 
    service.ImagePath = 'bla bla bal'; 

    return service; 

}); 

Quindi inserire il SettingsService nei controller che devono accedere alle impostazioni.

Naturalmente, è possibile creare ServiceService con un corpo vuoto, quindi nel metodo dell'applicazione .run() recuperare le impostazioni dal server.

Uso il modo semplice descritto e gestisco un SettingsService per ogni tipo di distribuzione ("sviluppo", "test", "produzione" ecc.). Quindi includi il giusto SettingsService nel tuo build-script a seconda del target (io uso Grunt, ma potresti usare anche Ant).

Problemi correlati