fix(angular): ensure required peer deps are installed when migrating from angular cli workspaces (#14766)
This commit is contained in:
parent
ed5ad1e367
commit
17aa8950d5
@ -56,7 +56,6 @@
|
|||||||
"webpack-merge": "5.7.3"
|
"webpack-merge": "5.7.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular-devkit/architect": ">= 0.1400.0 < 0.1600.0",
|
|
||||||
"@angular-devkit/build-angular": ">= 14.0.0 < 16.0.0",
|
"@angular-devkit/build-angular": ">= 14.0.0 < 16.0.0",
|
||||||
"@angular-devkit/schematics": ">= 14.0.0 < 16.0.0",
|
"@angular-devkit/schematics": ">= 14.0.0 < 16.0.0",
|
||||||
"@schematics/angular": ">= 14.0.0 < 16.0.0",
|
"@schematics/angular": ">= 14.0.0 < 16.0.0",
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import {
|
|||||||
createWorkspaceFiles,
|
createWorkspaceFiles,
|
||||||
deleteAngularJson,
|
deleteAngularJson,
|
||||||
deleteGitKeepFilesIfNotNeeded,
|
deleteGitKeepFilesIfNotNeeded,
|
||||||
|
ensureAngularDevKitPeerDependenciesAreInstalled,
|
||||||
formatFilesTask,
|
formatFilesTask,
|
||||||
getAllProjects,
|
getAllProjects,
|
||||||
getWorkspaceRootFileTypesInfo,
|
getWorkspaceRootFileTypesInfo,
|
||||||
@ -40,6 +41,7 @@ export async function migrateFromAngularCli(
|
|||||||
const options = normalizeOptions(tree, rawOptions, projects);
|
const options = normalizeOptions(tree, rawOptions, projects);
|
||||||
|
|
||||||
const angularJson = readJson(tree, 'angular.json') as any;
|
const angularJson = readJson(tree, 'angular.json') as any;
|
||||||
|
ensureAngularDevKitPeerDependenciesAreInstalled(tree);
|
||||||
|
|
||||||
if (options.preserveAngularCliLayout) {
|
if (options.preserveAngularCliLayout) {
|
||||||
addDependenciesToPackageJson(
|
addDependenciesToPackageJson(
|
||||||
|
|||||||
@ -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,3 +1,4 @@
|
|||||||
|
export * from './dependencies';
|
||||||
export * from './file-change-recorder';
|
export * from './file-change-recorder';
|
||||||
export * from './format-files-task';
|
export * from './format-files-task';
|
||||||
export * from './logger';
|
export * from './logger';
|
||||||
|
|||||||
@ -18,13 +18,13 @@ export default async function (tree: Tree) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const angularCliVersion =
|
const angularCliVersion =
|
||||||
pkgJson.devDependencies['@angular/cli'] ??
|
pkgJson.devDependencies?.['@angular/cli'] ??
|
||||||
pkgJson.dependencies['@angular/cli'] ??
|
pkgJson.dependencies?.['@angular/cli'] ??
|
||||||
angularDevkitVersion;
|
angularDevkitVersion;
|
||||||
|
|
||||||
const filteredPackages: Record<string, string> = packagesToInstall
|
const filteredPackages: Record<string, string> = packagesToInstall
|
||||||
.filter(
|
.filter(
|
||||||
(pkg) => !pkgJson.devDependencies[pkg] && !pkgJson.dependencies[pkg]
|
(pkg) => !pkgJson.devDependencies?.[pkg] && !pkgJson.dependencies?.[pkg]
|
||||||
)
|
)
|
||||||
.reduce((allPkgs, pkg) => ({ ...allPkgs, [pkg]: angularCliVersion }), {});
|
.reduce((allPkgs, pkg) => ({ ...allPkgs, [pkg]: angularCliVersion }), {});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user