Среды Dev / Prod для различных конфигураций клиентов - PullRequest
0 голосов
/ 08 июля 2019

В разделе Настройка конфигурации Руководства по настройке углового рабочего пространства обсуждается, как можно управлять различными конфигурациями в одном приложении.

В моем случае я решил создать конфигурацию для каждого клиента:

// angular.json excerpt
"architect": {
    "build": {
        "configurations": {
            "customer-1": {
                "fileReplacements": [
                    {
                    "replace": "src/environments/environment.ts",
                    "with": "src/environments/environment.customer-1.ts"
                    }
                ]
            },
            "customer-2": {
                "fileReplacements": [
                    {
                    "replace": "src/environments/environment.ts",
                    "with": "src/environments/environment.customer-2.ts"
                    }
                ]
            },
        }
    },
    "serve": {
        "builder": "@angular-devkit/build-angular:dev-server",
        "configurations": {
            "customer-1": {
                "browserTarget": "my-app:build:customer-1"
            },
            "customer-2": {
                "browserTarget": "my-app:build:customer-2"
            },
}

Я использую файлы среды для управления различными пользовательскими настройками и флагом production:

// environment.customer-1.ts excerpt
const environment = {
  production: true,
  customer: "Customer 1",
};


// environment.customer-2.ts excerpt
const environment = {
  production: true,
  customer: "Customer 2",
};

Наконец, мне нужен способ определить, было ли приложениеначал использовать команду ng serve или ng build, чтобы импортировать некоторые фиктивные провайдеры в модуль приложения.

Я пытался использовать флаг environment.production, но, очевидно, это всегда будет так:

import { environment } from '../environments/environment';

@NgModule({
  providers: [
    environment.production // is always true since I've set the flag in all customer-specific environment.ts files
       ? []
       : nonProductionProviders,
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Единственный способ поддержать этот сценарий - создать отдельные environment.ts файлы, а также соответствующие конфиги, например,

  • /src/environment.customer-1-dev.ts
  • /src/environment.customer-1-prod.ts
// angular.json excerpt
"architect": {
    "build": {
        "configurations": {
            "customer-1-dev": {
                "fileReplacements": [
                    {
                    "replace": "src/environments/environment.ts",
                    "with": "src/environments/environment.customer-1-dev.ts"
                    }
                ]
            },
            // etc.

Есть ли лучший способ сделать это?Передача дополнительного флага или, по крайней мере, возможность расширять конфигурации, было бы неплохо.

1 Ответ

0 голосов
/ 08 июля 2019

Я думаю, что сейчас у вас есть лучший способ.Файлы среды предназначены для конфигураций, которые уже известны во время компиляции, что в точности соответствует вашему сценарию

. У вас также может быть сценарий, который изменяет значение в файле src/environments/environment.customer-XX.ts непосредственно перед запуском, используйте ng serve, но вырискуете отправить этот измененный файл в git по ошибке.

У вас также может быть динамическая конфигурация json (модифицированная пост-сборка), которую вы получите через http-вызов перед загрузкой приложения, чтобы увидеть, будет ли он создан или обслуживается.был использован, но это может быть излишним для вашего случая.

В настоящее время нет способа расширить конфигурации из файла angular.json.Существует запрос функции , который, вероятно, порадует многих, но я не думаю, что он еще обрабатывается.

...