Skip to content

Commit

Permalink
fix(angular): ensure required peer deps are installed when migrating …
Browse files Browse the repository at this point in the history
…from angular cli workspaces (#14766)
  • Loading branch information
leosvelperez committed Feb 2, 2023
1 parent ed5ad1e commit 17aa895
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 4 deletions.
1 change: 0 additions & 1 deletion packages/angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
createWorkspaceFiles,
deleteAngularJson,
deleteGitKeepFilesIfNotNeeded,
ensureAngularDevKitPeerDependenciesAreInstalled,
formatFilesTask,
getAllProjects,
getWorkspaceRootFileTypesInfo,
Expand All @@ -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(
Expand Down
35 changes: 35 additions & 0 deletions packages/angular/src/generators/ng-add/utilities/dependencies.ts
Original file line number Diff line number Diff line change
@@ -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<string, string>);

addDependenciesToPackageJson(tree, {}, filteredPackages);
}
1 change: 1 addition & 0 deletions packages/angular/src/generators/ng-add/utilities/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './dependencies';
export * from './file-change-recorder';
export * from './format-files-task';
export * from './logger';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, string> = packagesToInstall
.filter(
(pkg) => !pkgJson.devDependencies[pkg] && !pkgJson.dependencies[pkg]
(pkg) => !pkgJson.devDependencies?.[pkg] && !pkgJson.dependencies?.[pkg]
)
.reduce((allPkgs, pkg) => ({ ...allPkgs, [pkg]: angularCliVersion }), {});

Expand Down

0 comments on commit 17aa895

Please sign in to comment.