From 17aa8950d518e3704b1ee5ec31f85fbef7e92aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Thu, 2 Feb 2023 10:47:35 +0100 Subject: [PATCH] fix(angular): ensure required peer deps are installed when migrating from angular cli workspaces (#14766) --- packages/angular/package.json | 1 - .../ng-add/migrate-from-angular-cli.ts | 2 ++ .../ng-add/utilities/dependencies.ts | 35 +++++++++++++++++++ .../src/generators/ng-add/utilities/index.ts | 1 + .../install-required-packages.ts | 6 ++-- 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 packages/angular/src/generators/ng-add/utilities/dependencies.ts diff --git a/packages/angular/package.json b/packages/angular/package.json index decba35c34..cd51b4693a 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -56,7 +56,6 @@ "webpack-merge": "5.7.3" }, "peerDependencies": { - "@angular-devkit/architect": ">= 0.1400.0 < 0.1600.0", "@angular-devkit/build-angular": ">= 14.0.0 < 16.0.0", "@angular-devkit/schematics": ">= 14.0.0 < 16.0.0", "@schematics/angular": ">= 14.0.0 < 16.0.0", diff --git a/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts b/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts index 415508a859..11d6ad5f99 100755 --- a/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts +++ b/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts @@ -18,6 +18,7 @@ import { createWorkspaceFiles, deleteAngularJson, deleteGitKeepFilesIfNotNeeded, + ensureAngularDevKitPeerDependenciesAreInstalled, formatFilesTask, getAllProjects, getWorkspaceRootFileTypesInfo, @@ -40,6 +41,7 @@ export async function migrateFromAngularCli( const options = normalizeOptions(tree, rawOptions, projects); const angularJson = readJson(tree, 'angular.json') as any; + ensureAngularDevKitPeerDependenciesAreInstalled(tree); if (options.preserveAngularCliLayout) { addDependenciesToPackageJson( diff --git a/packages/angular/src/generators/ng-add/utilities/dependencies.ts b/packages/angular/src/generators/ng-add/utilities/dependencies.ts new file mode 100644 index 0000000000..341d9b09c9 --- /dev/null +++ b/packages/angular/src/generators/ng-add/utilities/dependencies.ts @@ -0,0 +1,35 @@ +import { addDependenciesToPackageJson, readJson, Tree } from '@nrwl/devkit'; +import { getPkgVersionForAngularMajorVersion } from '../../../utils/version-utils'; +import { getInstalledAngularMajorVersion } from '../../utils/version-utils'; + +export function ensureAngularDevKitPeerDependenciesAreInstalled( + tree: Tree +): void { + const packagesToInstall = [ + '@angular-devkit/core', + '@angular-devkit/schematics', + '@schematics/angular', + ]; + + const { devDependencies, dependencies } = readJson(tree, 'package.json'); + let angularCliVersion = + devDependencies?.['@angular/cli'] ?? dependencies?.['@angular/cli']; + + if (!angularCliVersion) { + const angularMajorVersion = getInstalledAngularMajorVersion(tree); + const angularDevkitVersion = getPkgVersionForAngularMajorVersion( + 'angularDevkitVersion', + angularMajorVersion + ); + angularCliVersion = angularDevkitVersion; + } + + const filteredPackages = packagesToInstall + .filter((pkg) => !devDependencies?.[pkg] && !dependencies?.[pkg]) + .reduce((allPkgs, pkg) => { + allPkgs[pkg] = angularCliVersion; + return allPkgs; + }, {} as Record); + + addDependenciesToPackageJson(tree, {}, filteredPackages); +} diff --git a/packages/angular/src/generators/ng-add/utilities/index.ts b/packages/angular/src/generators/ng-add/utilities/index.ts index b39c9ec6bf..e6b9899150 100644 --- a/packages/angular/src/generators/ng-add/utilities/index.ts +++ b/packages/angular/src/generators/ng-add/utilities/index.ts @@ -1,3 +1,4 @@ +export * from './dependencies'; export * from './file-change-recorder'; export * from './format-files-task'; export * from './logger'; diff --git a/packages/angular/src/migrations/update-15-7-0/install-required-packages.ts b/packages/angular/src/migrations/update-15-7-0/install-required-packages.ts index 450872981c..5a550303e1 100644 --- a/packages/angular/src/migrations/update-15-7-0/install-required-packages.ts +++ b/packages/angular/src/migrations/update-15-7-0/install-required-packages.ts @@ -18,13 +18,13 @@ export default async function (tree: Tree) { ); const angularCliVersion = - pkgJson.devDependencies['@angular/cli'] ?? - pkgJson.dependencies['@angular/cli'] ?? + pkgJson.devDependencies?.['@angular/cli'] ?? + pkgJson.dependencies?.['@angular/cli'] ?? angularDevkitVersion; const filteredPackages: Record = packagesToInstall .filter( - (pkg) => !pkgJson.devDependencies[pkg] && !pkgJson.dependencies[pkg] + (pkg) => !pkgJson.devDependencies?.[pkg] && !pkgJson.dependencies?.[pkg] ) .reduce((allPkgs, pkg) => ({ ...allPkgs, [pkg]: angularCliVersion }), {});