javascript - Bästa tillvägagångssättet för konfigurationsfil för en Angular/RequireJS-applikation?
Finns det en allmänt accepterad bästa praxis för att underhålla en konfigurationsfil som är tillgänglig på klientsidan (något slags motsvarighet till AppSettings-sektionen på serversidan i en ASP.NET-applikation)?
Vår applikation är baserad på Angular. Vår önskan är att externalisera miljöspecifika inställningar (som fjärrsystem-URL:er, etc.) från själva koden, så att idealiskt sett en driftperson och inte en utvecklare kan ändra inställningar på ett ställe.
Tack på förhand för all information!
Svar #1
Jag tror inte att det är en bra idé att använda en config.js-fil när man utvecklar AngularJS-appar. Anledningen är att du kommer att bryta alla möjligheter till automatisk testning.
Istället skapar jag en "Inställningar"-tjänst där jag specificerar min app-specifika kontext. Till exempel:
angular.module('settings',[]).factory('SettingsService',function(){
var service={};
// Insert your settings here
service.ServerPath = 'whateverwhatever';
service.ImagePath = 'bla bla bal';
return service;
});
Injicera sedan SettingsService i de kontroller som behöver åtkomst till inställningarna.
Självklart, (vilket jag utelämnade för enkelhetens skull här), kunde du istället skapa ServiceService med en tom kropp, och sedan i applikationens .run()-metod hämta inställningarna från servern.
Jag använder det enkelt beskrivna sättet och underhåller en SettingsService för varje distributionstyp ("development", "test", "production" etc). Sedan inkluderar jag bara rätt SettingsService i ditt byggskript beroende på målet (jag använder Grunt, men du kan också använda Ant).
Svar #2
Jag tror att svaret på detta är mycket beroende av hur du placerar ditt Angular-lager i den övergripande strukturen av applikationen.
Till exempel har jag serverat en Angular-applikation på samma sätt för varje miljö från den grundläggande serverapplikationen (Grails, node.js, RoR) och Angular-applikationen är alltid samma kodbas eftersom de data jag matar till Angular styrs av serversidan och Angular-anropen är alla relativa till bas-URL:en. Med andra ord, jag proxar all data genom serverappen som serverar Angular-applikationen, så allt Angular-appen "vet om" är dess egen URL.
Om du direkt anropar andra tjänster och inte använder basserverapplikationen för att vidarebefordra data, kan du kanske fortfarande använda servern för att ge dig URL:erna beroende på någon konfiguration på serversidan av applikationen. I så fall kan du alltid lagra dessa konfigurationsvärden i en DB-tabell så att det är möjligt att ändra dem i farten.
