javascript - Cea mai bună abordare pentru fișierul de configurare pentru o aplicație Angular/RequireJS?


Există o practică de bune practici acceptată în mod obișnuit pentru menținerea unui fișier de configurare care este disponibil pe partea clientului (un fel de echivalent al secțiunii AppSettings pe partea serverului într-o aplicație ASP.NET)?

Aplicația noastră se bazează pe Angular. Dorința noastră este să externalizăm setările specifice mediului (cum ar fi URL-urile sistemelor externe, etc.) din codul propriu-zis, astfel încât, ideal, o persoană din echipa de operațiuni și nu un dezvoltator să poată modifica setările într-un singur loc.

Mulțumesc anticipat pentru orice sugestie!

Răspuns #1

Nu cred că este o idee bună să folosești un fișier config.js atunci când dezvolți aplicații AngularJS. Motivul este că vei distruge orice posibilitate de testare automată.

În schimb, creez un serviciu „Setări” în care specific contextul specific aplicației mele. De exemplu:

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

   var service={};

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

   return service;

});

Apoi injectați serviciul SettingsService în controllerele care au nevoie de acces la setări.

Desigur, (pe care l-am omis pentru simplitate aici), ai putea în schimb să creezi ServiceService cu un corp gol și apoi, în metoda .run() a aplicației, să preiei setările de la server.

Folosesc metoda simplă descrisă și mențin un SettingsService pentru fiecare tip de implementare („development”, „test”, „production” etc.). Apoi, doar includ SettingsService-ul potrivit în scriptul de construire în funcție de țintă (eu folosesc Grunt, dar poți folosi și Ant).

Răspunsul #2

Cred că răspunsul la aceasta depinde foarte mult de modul în care îți configurezi stratul Angular în structura generală a aplicației.

De exemplu, am livrat o aplicație Angular în același mod pentru fiecare mediu din aplicația de server de bază (Grails, node.js, RoR) și aplicația Angular este întotdeauna aceeași bază de cod pentru că datele pe care le furnizez către Angular sunt controlate de partea de server și apelurile Angular sunt toate relative la URL-ul de bază. Cu alte cuvinte, fac proxy pentru toate datele prin aplicația de server care servește aplicația Angular, astfel încât tot ceea ce 'știe' aplicația Angular este propriul său URL.

Dacă apelați direct alte servicii și nu utilizați aplicația server de bază pentru a transmite datele, atunci poate că totuși puteți folosi serverul pentru a vă furniza URL-urile în funcție de unele configurații de pe partea de server a aplicației. În acest caz, puteți întotdeauna să stocați acele valori de configurare într-un tabel din baza de date, astfel încât să fie posibilă modificarea lor din mers.