Лучший способ обработки сред в Angular с помощью Typescript

#angular #typescript #angular-cli

#angular #typescript #angular-cli

Вопрос:

В настоящее время я работаю над стратегией максимально простой обработки нескольких сред в Angular CLI.

Для этого я придерживаюсь такого подхода: введите описание изображения здесь

Моя цель — иметь базовые URL-адреса для разных конечных точек REST только один раз, и все среды должны иметь их (расширяющиеся или что-то в этом роде).

Каков наилучший способ реализовать это?

Комментарии:

1. может быть, записать пример в примере кода вместо картинки.

2. Как вы представили на рисунке, вы могли бы использовать конфигурацию среды Angular: angular.io/guide/build

3. notificationsBaseUrl и accountsBaseUrl лучше использовать в соответствующих файлах service.ts.

Ответ №1:

Вы можете использовать несколько файлов среды, вот как вы можете это сделать, и при сборке вы должны указать конфигурацию (примеры: prod, test, uat)

  • вы должны добавить все свои конфигурации в файл angular.json

     "configurations": {
        "production": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.prod.ts"
            }
          ],
          "optimization": true,
          "outputHashing": "all",
          "sourceMap": false,
          "extractCss": true,
          "namedChunks": false,
          "aot": true,
          "extractLicenses": true,
          "vendorChunk": false,
          "buildOptimizer": true,
          "budgets": [
            {
              "type": "initial",
              "maximumWarning": "2mb",
              "maximumError": "5mb"
            }
          ]
        },
        "develop": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.develop.ts"
            }
          ]
        },
        "release": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.release.ts"
            }
          ]
        },
        "uat": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.uat.ts"
            }
          ]
        },
      }
      

добавьте свои URL-адреса для каждого файла, и когда вы создаете или обслуживаете свое приложение локально, вы должны указать конфигурацию

 ng build --configuration=uat // for uat env

ng serve --configuration=uat 
  

или

 ng build --prod // for production env
  

импортируйте его таким образом, и он выберет правильный вариант на основе выбранной конфигурации

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

Ответ №2:

Если вы используете webpack, вы можете создать файл environment.ts со всеми специфичными для среды данными в качестве свойств объекта….

     {
        environment: 'dev',
        baseurl: 'http://myBaseUrl'
    }
  

создайте отдельный файл для каждой среды (prod, qa и т. Д.) С одним и тем же объектом и свойствами. импортируйте обычный файл environment.ts, когда вам нужна информация о среде….

Затем в каждой конфигурации webpack используйте NormalModuleReplacementPlugin …

     new webpack.NormalModuleReplacementPlugin(/./environment./, './environment.qa.ts')
  

Вы в основном указываете webpack везде, где я импортирую среду, заменяя ее на среду с environment.qa (или в любой другой версии)