Есть ли способ расширить конфигурации в angular.json? - PullRequest
0 голосов
/ 28 августа 2018

При создании приложения Angular 6 мне нужно указать сразу 2 вещи:

  • Если это сборка для производства или разработки
  • Я использую локаль

По моему angular.json у меня есть:

"build": {
  ...
  "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
    },
    "pl": {
      "fileReplacements": [
        {
          "replace": "src/assets/i18n/translations.json",
          "with": "src/assets/i18n/pl.json"
        }
      ]
    },
    "en": {
      "fileReplacements": [
        {
          "replace": "src/assets/i18n/translations.json",
          "with": "src/assets/i18n/en.json"
        }
      ]
    }
  }
}

Но когда я делаю ng build --configuration=en --configuration=production, я получаю сообщение об ошибке Configuration 'en,production' could not be found. Я так понимаю, это означает, что вы можете указать только 1 конфигурацию за раз.

Это означает, что мне нужно создать отдельные конфигурации en, pl, productionEn, productionPl. Хотя это и не самый чистый образец, я могу жить с этим.

"build": {
  ...
  "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
    },
    "pl": {
      "fileReplacements": [
        {
          "replace": "src/assets/i18n/translations.json",
          "with": "src/assets/i18n/pl.json"
        }
      ]
    },
    "en": {
      "fileReplacements": [
        {
          "replace": "src/assets/i18n/translations.json",
          "with": "src/assets/i18n/en.json"
        }
      ]
    },
    "productionPl": {
      "fileReplacements": [
        {
          "replace": "src/environments/environment.ts",
          "with": "src/environments/environment.prod.ts"
        },
        {
          "replace": "src/assets/i18n/translations.json",
          "with": "src/assets/i18n/pl.json"
        }
      ],
      "optimization": true,
      "outputHashing": "all",
      "sourceMap": false,
      "extractCss": true,
      "namedChunks": false,
      "aot": true,
      "extractLicenses": true,
      "vendorChunk": false,
      "buildOptimizer": true
    },
    "productionEn": {
      "fileReplacements": [
        {
          "replace": "src/environments/environment.ts",
          "with": "src/environments/environment.prod.ts"
        },
        {
          "replace": "src/assets/i18n/translations.json",
          "with": "src/assets/i18n/en.json"
        }
      ],
      "optimization": true,
      "outputHashing": "all",
      "sourceMap": false,
      "extractCss": true,
      "namedChunks": false,
      "aot": true,
      "extractLicenses": true,
      "vendorChunk": false,
      "buildOptimizer": true
    }
  }
}

Но я не могу жить с копированием и вставкой всего содержимого конфигурации production в productionEn и productionPl. Если я добавлю еще больше локалей или какой-то третий отдельный аспект, который я хотел бы указать во время сборки, этот шаблон станет для меня настоящим кошмаром. К сожалению, похоже, что этот шаблон рекомендует Angular в своей документации .

Есть ли способ сообщить Angular CLI, что productionEn расширяет production, чтобы не дублировать один и тот же код конфигурации несколько раз? Что-то вроде кода ниже:

"build": {
  ...
  "configurations": {
    "production": {
      (...)
    },
    "pl": {
      "extends": "production",
      (...)
    },
    "en": {
      "extends": "production",
      (...)
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Читая некоторые проблемы и angular.json документацию, кажется, что options действует как настройки по умолчанию для проекта

"architect": {
        "build": {          
          "options": {...}

Они переопределяются параметрами partial, установленными в configurations. Из рабочей области Angular CLI :

configurations (object): A map of alternative target options.
configurationName (object): Partial options override for this builder.

В этом комментарии к выпуску также упоминается использование configurations в качестве переопределения

Звучит так, что все значения по умолчанию для проекта можно добавить к объекту options, например. переместите любые дубликаты с production, productionPl на options: {}, а затем добавьте fileReplacements и несколько других необходимых вам переопределений

Примечание: я еще не проверял это, это просто предложение, основанное на документах и ​​проблемах

0 голосов
/ 29 августа 2018

ты спрашиваешь?

"scripts": {
    [...]
    "build-i18n": "for lang in en es fr pt; 
       do ng build --config=$lang;
       done"
 }
...