2013-05-02 5 views
6

Gibt es eine allgemein akzeptierte bewährte Methode zum Verwalten einer Konfigurationsdatei, die auf der Clientseite verfügbar ist (eine Art Äquivalent des Abschnitts AppSettings auf der Serverseite in einer ASP.NET-Anwendung)?Der beste Ansatz für die Konfigurationsdatei für eine Angular/RequireJS-Anwendung?

Unsere Anwendung basiert auf Angular. Unser Wunsch ist es, umgebungsspezifische Einstellungen (wie entfernte System-URLs usw.) aus dem Code selbst heraus zu externalisieren, so dass im Idealfall eine Ops-Person und nicht ein Entwickler Einstellungen an einem Ort ändern kann.

Vielen Dank im Voraus für jede Einsicht!

+1

Sie können Einstellungen in einer dedizierten Konfiguration beibehalten.js-Datei, Bearbeiten von JSON ist nicht schwieriger als das Bearbeiten von XML – Guillaume86

+1

In Bezug auf Angular, könnte diese Antwort Sie weiter inspirieren http://StackOverflow.com/Questions/16339595/angular-JS-Configuration-for-Different-Enviroments – kfis

Antwort

1

Ich denke, die Antwort darauf ist sehr davon abhängig, wie Sie Ihre Winkelschicht in der Gesamtstruktur der Anwendung einrichten.

Zum Beispiel habe ich eine eckige Anwendung auf die gleiche Weise für jede Umgebung aus der Basis-Server-Anwendung (Grails, node.js, RoR) serviert und die eckige Anwendung ist immer die gleiche Code-Basis, weil die Daten füttern eckig wird von der Server-Seite gesteuert, und die eckigen Aufrufe beziehen sich alle auf die Basis-URL. Mit anderen Worten, ich übertrage alle Daten über die Server-App, die die Angular-Anwendung bedient, so dass die eckige App "davon weiß" eine eigene URL ist.

Wenn Sie andere Dienste direkt aufrufen und die Basisserveranwendung nicht zum Proxy der Daten verwenden, können Sie den Server möglicherweise weiterhin verwenden, um die URLs abhängig von einigen Konfigurationen auf der Serverseite der Anwendung zu füttern. In diesem Fall können Sie diese Konfigurationswerte immer in einer DB-Tabelle speichern, um sie im laufenden Betrieb zu ändern.

1

Ich habe das gleiche Dilemma, und was ich jetzt zurückgegriffen haben ist: Ich habe eine Reihe von Konfigurationsdateien, wie config-local.js, config-staging.js usw. Dann erstelle ich eine Symlink zu config.js überall wo ich meine App ausführen möchte. Auf meinem lokalen Desktop, Symlink zu config-local.js, in der Staging-Umgebung, ich symlink zu config-staging.js. Dann steckte ich config.js in .gitignore.

Pro: Es funktioniert. Nachteile: Erfordert Symlink-Erstellung, bevor die App ordnungsgemäß funktioniert.

Zukunft: Vielleicht eine Aufgabe in grunt hinzufügen, um den Symlink zu erstellen?

3

Ich denke nicht, dass es eine gute Idee ist, eine config.js Datei zu verwenden, wenn Sie AngularJS Apps entwickeln. Der Grund dafür ist, dass Sie keine Möglichkeit zum automatischen Testen haben.

Ich erstelle stattdessen einen Dienst "Einstellungen", in dem ich meinen appspezifischen Kontext angeben. Zum Beispiel:

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

    var service={}; 

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

    return service; 

}); 

injizieren dann die SettingsService in Steuerungen, die den Zugriff auf die Einstellungen benötigen.

Natürlich, (was ich hier zur Vereinfachung weggelassen), könnten Sie stattdessen den ServiceService mit einem leeren Körper erstellen, und dann in der Anwendung .run() -Methode holen Sie die Einstellungen vom Server.

Ich benutze die einfache beschriebene Methode und pflege einen SettingsService für jeden Bereitstellungstyp ("Entwicklung", "Test", "Produktion" usw.). Fügen Sie dann in Ihrem Build-Skript je nach Ziel den richtigen SettingsService ein (ich benutze Grunt, aber Sie könnten auch Ant verwenden).

Verwandte Themen