Есть ли способ расширить конфигурации в angular.json?
При создании приложения Angular 6 мне нужно указать сразу две вещи:
- Если это производство или разработка построить
- Я использую язык
В моем 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",
(...)
}
}
}
Ответы
Ответ 1
angular.json
некоторые проблемы и документацию angular.json
, кажется, что options
действуют как значения по умолчанию для проекта
"architect": {
"build": {
"options": {...}
Они переопределены partial
параметрами, заданными в configurations
. Из рабочей области Угловой CLI wiki:
configurations (object): A map of alternative target options.
configurationName (object): Partial options override for this builder.
В этом выпуске комментария также упоминается использование configurations
в качестве переопределения
Это похоже на то, что все параметры по умолчанию для проекта могут быть добавлены к объекту options
например, переместите любые дубликаты из production
, productionPl
в options: {}
, а затем добавьте fileReplacements
и несколько других переопределений, которые вам нужны
Примечание. Я еще не тестировал это, это просто предложение, основанное на документах и проблемах
Ответ 2
Наконец, есть способ сделать это, указав несколько конфигураций в командной строке:
ng build --configuration=en,production
Актуальная проблема
Ответ 3
вы спрашиваете?
"scripts": {
[...]
"build-i18n": "for lang in en es fr pt;
do ng build --config=$lang;
done"
}