fix(angular): ensure required peer deps are installed when migrating from angular cli workspaces (#14766)

This commit is contained in:
Leosvel Pérez Espinosa 2023-02-02 10:47:35 +01:00 committed by GitHub
parent ed5ad1e367
commit 17aa8950d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 4 deletions

View File

@ -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",

View File

@ -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(

View File

@ -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);
}

View File

@ -1,3 +1,4 @@
export * from './dependencies';
export * from './file-change-recorder';
export * from './format-files-task';
export * from './logger';

View File

@ -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 }), {});