Skip to content

Commit 1da359a

Browse files
alan-agius4filipesilva
authored andcommitted
feat(@angular-devkit/architect): add implementation for defaultConfiguration
With this change, the architect can be configured to use a default configuration when it's not provided as part of the target. Consider the below, where `defaultConfiguration` is configured to `production`. Running `ng build` will be invoked with "production" configuration. ```js "build": { "builder": "@angular-devkit/build-angular:browser", "defaultConfiguration": "production", "options": { ... }, "configurations": { "production": { ... } } } ```
1 parent f7e3e23 commit 1da359a

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

packages/angular_devkit/architect/node/node-modules-architect-host.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export interface WorkspaceHost {
3030
getMetadata(project: string): Promise<json.JsonObject>;
3131
getOptions(project: string, target: string, configuration?: string): Promise<json.JsonObject>;
3232
hasTarget(project: string, target: string): Promise<boolean>;
33+
getDefaultConfigurationName(project: string, target: string): Promise<string | undefined>;
3334
}
3435

3536
function findProjectTarget(
@@ -99,6 +100,9 @@ export class WorkspaceNodeModulesArchitectHost implements ArchitectHost<NodeModu
99100
async hasTarget(project, target) {
100101
return !!workspaceOrHost.projects.get(project)?.targets.has(target);
101102
},
103+
async getDefaultConfigurationName(project, target) {
104+
return workspaceOrHost.projects.get(project)?.targets.get(target)?.defaultConfiguration;
105+
},
102106
};
103107
}
104108
}
@@ -166,9 +170,11 @@ export class WorkspaceNodeModulesArchitectHost implements ArchitectHost<NodeModu
166170
}
167171

168172
let options = await this.workspaceHost.getOptions(target.project, target.target);
173+
const targetConfiguration =
174+
target.configuration || await this.workspaceHost.getDefaultConfigurationName(target.project, target.target);
169175

170-
if (target.configuration) {
171-
const configurations = target.configuration.split(',').map((c) => c.trim());
176+
if (targetConfiguration) {
177+
const configurations = targetConfiguration.split(',').map((c) => c.trim());
172178
for (const configuration of configurations) {
173179
options = {
174180
...options,

packages/angular_devkit/build_angular/src/testing/builder-harness.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,9 @@ export class BuilderHarness<T> {
174174

175175
return this.targetName === target || this.builderTargets.has(target);
176176
},
177+
getDefaultConfigurationName: async (_project, _target) => {
178+
return undefined;
179+
},
177180
validate: async (options, builderName) => {
178181
let schema;
179182
if (builderName === this.builderInfo.builderName) {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { expectFileToExist } from '../../utils/fs';
2+
import { ng } from '../../utils/process';
3+
import { updateJsonFile } from '../../utils/project';
4+
import { expectToFail } from '../../utils/utils';
5+
6+
export default async function () {
7+
await updateJsonFile('angular.json', workspace => {
8+
const build = workspace.projects['test-project'].architect.build;
9+
build.defaultConfiguration = undefined;
10+
build.options = {
11+
...build.options,
12+
optimization: false,
13+
buildOptimizer: false,
14+
outputHashing: 'none',
15+
sourceMap: true,
16+
};
17+
});
18+
19+
await ng('build');
20+
await expectFileToExist('dist/test-project/main.js');
21+
await expectFileToExist('dist/test-project/main.js.map');
22+
23+
// Add new configuration and set "defaultConfiguration"
24+
await updateJsonFile('angular.json', workspace => {
25+
const build = workspace.projects['test-project'].architect.build;
26+
build.defaultConfiguration = 'defaultConfiguration';
27+
build.configurations.defaultConfiguration = {
28+
sourceMap: false,
29+
};
30+
});
31+
32+
await ng('build');
33+
await expectFileToExist('dist/test-project/main.js');
34+
await expectToFail(() => expectFileToExist('dist/test-project/main.js.map'));
35+
}

0 commit comments

Comments
 (0)