Skip to content

Commit 60392dd

Browse files
committed
fix(@schematics/angular): keep existing build versions
1 parent 4493d78 commit 60392dd

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

packages/schematics/angular/migrations/use-application-builder/migration.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ import {
1515
externalSchematic,
1616
} from '@angular-devkit/schematics';
1717
import { dirname, join } from 'node:path/posix';
18-
import { getPackageJsonDependency } from '../../utility/dependencies';
1918
import {
2019
DependencyType,
2120
ExistingBehavior,
2221
addDependency,
22+
getDependency,
2323
removeDependency,
2424
} from '../../utility/dependency';
2525
import { JSONFile } from '../../utility/json-file';
@@ -271,13 +271,13 @@ function updateProjects(tree: Tree, context: SchematicContext) {
271271
}
272272

273273
// Add direct @angular/build dependencies and remove @angular-devkit/build-angular
274-
const buildDependency =
275-
getPackageJsonDependency(tree, '@angular-devkit/build-angular') ??
276-
getPackageJsonDependency(tree, '@angular/build');
274+
const buildAngularVersion =
275+
getDependency(tree, '@angular-devkit/build-angular')?.version ??
276+
latestVersions.DevkitBuildAngular;
277277
rules.push(
278-
addDependency('@angular/build', buildDependency?.version ?? latestVersions.AngularBuild, {
278+
addDependency('@angular/build', buildAngularVersion, {
279279
type: DependencyType.Dev,
280-
existing: ExistingBehavior.Replace,
280+
existing: ExistingBehavior.Skip,
281281
}),
282282
removeDependency('@angular-devkit/build-angular'),
283283
);

packages/schematics/angular/migrations/use-application-builder/migration_spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,24 @@ describe(`Migration to use the application builder`, () => {
467467
expect(devDependencies['@angular-devkit/build-angular']).toBeUndefined();
468468
});
469469

470+
it('should preserve an existing "@angular/build" version when migrating', async () => {
471+
tree.overwrite(
472+
'/package.json',
473+
JSON.stringify({
474+
devDependencies: {
475+
'@angular-devkit/build-angular': '~18.2.20',
476+
'@angular/build': '~18.2.10',
477+
},
478+
}),
479+
);
480+
481+
const newTree = await schematicRunner.runSchematic(schematicName, {}, tree);
482+
483+
const { devDependencies } = JSON.parse(newTree.readContent('/package.json'));
484+
expect(devDependencies['@angular/build']).toBe('~18.2.10');
485+
expect(devDependencies['@angular-devkit/build-angular']).toBeUndefined();
486+
});
487+
470488
it('it should not add esModuleInterop and moduleResolution when module is preserve', async () => {
471489
tree.overwrite(
472490
'tsconfig.json',

0 commit comments

Comments
 (0)