diff --git a/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts b/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts index b9ecdb59b2..7da77446b5 100644 --- a/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts +++ b/packages/nx/src/project-graph/utils/project-configuration-utils.spec.ts @@ -1524,6 +1524,41 @@ describe('project-configuration-utils', () => { } `); }); + it('should not mutate the target', () => { + const config = { + name: 'project', + root: 'libs/project', + targets: { + foo: { + executor: 'nx:noop', + options: { + config: '{projectRoot}/config.json', + }, + configurations: { + prod: { + config: '{projectRoot}/config.json', + }, + }, + }, + bar: { + command: 'echo {projectRoot}', + options: { + config: '{projectRoot}/config.json', + }, + configurations: { + prod: { + config: '{projectRoot}/config.json', + }, + }, + }, + }, + }; + const originalConfig = JSON.stringify(config, null, 2); + + normalizeTarget(config.targets.foo, config); + normalizeTarget(config.targets.bar, config); + expect(JSON.stringify(config, null, 2)).toEqual(originalConfig); + }); }); describe('createProjectConfigurations', () => { diff --git a/packages/nx/src/project-graph/utils/project-configuration-utils.ts b/packages/nx/src/project-graph/utils/project-configuration-utils.ts index 43ab71fb62..5bc1ca1031 100644 --- a/packages/nx/src/project-graph/utils/project-configuration-utils.ts +++ b/packages/nx/src/project-graph/utils/project-configuration-utils.ts @@ -1105,6 +1105,13 @@ export function normalizeTarget( target: TargetConfiguration, project: ProjectConfiguration ) { + target = { + ...target, + configurations: { + ...target.configurations, + }, + }; + target = resolveCommandSyntacticSugar(target, project.root); target.options = resolveNxTokensInOptions( @@ -1113,7 +1120,6 @@ export function normalizeTarget( `${project.root}:${target}` ); - target.configurations ??= {}; for (const configuration in target.configurations) { target.configurations[configuration] = resolveNxTokensInOptions( target.configurations[configuration],