So verwalten Sie Umgebungskonfigurationsdateien und -ziele
Wenn Sie eine Winkelanwendung mit den Tools Angular CLI oder Nrwl Nx erstellt haben , haben Sie immer einen Ordner mit Umgebungskonfigurationsdateien:
<APP_FOLDER>/src/environments/ └──environment.ts └──environment.prod.ts
Sie können environment.prod.ts in environment.production.ts umbenennen. Sie können beispielsweise auch zusätzliche Konfigurationsdateien wie environment.qa.ts oder environment.staging.ts erstellen.
<APP_FOLDER>/src/environments/ └──environment.ts └──environment.prod.ts └──environment.qa.ts └──environment.staging.ts
Die Datei environment.ts wird standardmäßig verwendet. Um die verbleibenden Dateien zu verwenden, müssen Sie angle.json öffnen und den Abschnitt fileReplacements in der Build- Konfiguration konfigurieren und Blöcke zu den Serve- und E2E- Konfigurationen hinzufügen .
{ "architect":{ "build":{ "configurations":{ "production":{ "fileReplacements":[ { "replace":"<APP_FOLDER>/src/environments/environment.ts", "with":"<APP_FOLDER>/src/environments/environment.production.ts" } ] }, "staging":{ "fileReplacements":[ { "replace":"<APP_FOLDER>/src/environments/environment.ts", "with":"<APP_FOLDER>/src/environments/environment.staging.ts" } ] } } }, "serve":{ "configurations":{ "production":{ "browserTarget":"app-name:build:production" }, "staging":{ "browserTarget":"app-name:build:staging" } } }, "e2e":{ "configurations":{ "production":{ "browserTarget":"app-name:serve:production" }, "staging":{ "browserTarget":"app-name:serve:staging" } } } } }
Verwenden Sie die folgenden Befehle, um eine Anwendung mit einer bestimmten Umgebung zu erstellen oder auszuführen:
ng build --configuration=staging ng start --configuration=staging ng e2e --configuration=staging ng build --prod ng build --configuration=production
Erstellen Sie eine Schnittstelle für Umgebungsdateien
Verwenden Sie Umgebungsdateien nicht direkt, sondern nur über DI
Die Verwendung globaler Variablen und direkter Importe verstößt gegen den OOP-Ansatz und erschwert die Testbarkeit Ihrer Klassen. Daher ist es besser, einen Dienst zu erstellen, der in Ihre Komponenten und andere Dienste eingefügt werden kann. Hier ist ein Beispiel für einen solchen Service mit der Möglichkeit, einen Standardwert anzugeben.
export const ENVIRONMENT = new InjectionToken<{ [key: string]: any }>('environment'); @Injectable({ providedIn: 'root', }) export class EnvironmentService { private readonly environment: any;
Trennen Sie Ihre Umgebungskonfiguration und Geschäftslogik
Die Umgebungskonfiguration enthält nur Eigenschaften, die sich auf die Umgebung beziehen, z. B. apiUrl . Idealerweise sollte die Umgebungskonfiguration aus zwei Eigenschaften bestehen:
export const environment = { production: true, apiUrl: 'https://api.url', };
Auch in dieser Konfiguration können Sie eine Eigenschaft hinzufügen, um debugMode: true mode debug zu aktivieren, oder Sie können den Namen des Servers hinzufügen, auf dem der Anwendungsumgebungsname : 'QA' ausgeführt wird. Vergessen Sie jedoch nicht, dass dies eine sehr schlechte Vorgehensweise ist, wenn Ihr Code etwas über den Server weiß, auf dem er ausgeführt wird .
Speichern Sie niemals vertrauliche Informationen oder Kennwörter in einer Umgebungskonfiguration.
Andere Konfigurationseinstellungen wie maxItemsOnPage oder galleryAnimationSpeed sollten an einem anderen Ort gespeichert werden. Es wird empfohlen, configuration.service.ts zu verwenden , um Einstellungen von einem Endpunkt zu erhalten oder config.json einfach aus dem Assets-Ordner zu laden.
1. Asynchroner Ansatz (wird verwendet, wenn sich die Konfiguration zur Laufzeit ändern kann)
2. Synchroner Ansatz (wird verwendet, wenn sich die Konfiguration fast nie ändert)
Ersetzen Sie Umgebungsvariablen während der Bereitstellung oder Laufzeit
Viele Teams verstoßen gegen die Regel "Einmal erstellen, viele bereitstellen", indem sie die Anwendung für jede Umgebung zusammenstellen, anstatt nur die Konfiguration im bereits erstellten Build zu ändern.
Erstellen Sie keine separaten Assemblys mit unterschiedlichen Konfigurationen, sondern verwenden Sie während der Bereitstellung oder während der Codeausführung nur eine Produktionsassembly und Ersatzwerte. Hierfür gibt es mehrere Möglichkeiten:
Ersetzen Sie die Werte durch Platzhalter in den Umgebungsdateien, die in der Endmontage während der Bereitstellung ersetzt werden
export const environment = { production: true, apiUrl: 'APPLICATION_API_URL', };
Während der Bereitstellung sollte die Zeichenfolge APPLICATION_API_URL durch die tatsächliche Adresse des API-Servers ersetzt werden.
Verwenden Sie globale Variablen und injizieren Sie Konfigurationsdateien mit Docker-Volumes
export const environment = { production: true, apiUrl: window.APPLICATION_API_URL, };
Vielen Dank für Ihre Aufmerksamkeit auf den Artikel, ich werde mich über konstruktive Kritik und Kommentare freuen.
Treten Sie auch unserer Community auf Medium , Telegram oder Twitter bei .