fix(angular): respect the provided version when running make-angular-cli-faster
This commit is contained in:
parent
7762eddfc8
commit
f16f53bcc5
@ -1,7 +1,5 @@
|
|||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { prompt } from 'enquirer';
|
import { lt, lte, major } from 'semver';
|
||||||
import { lt, lte, major, satisfies } from 'semver';
|
|
||||||
import { output } from 'nx/src/utils/output';
|
|
||||||
import { readModulePackageJson } from 'nx/src/utils/package-json';
|
import { readModulePackageJson } from 'nx/src/utils/package-json';
|
||||||
import { PackageManagerCommands } from 'nx/src/utils/package-manager';
|
import { PackageManagerCommands } from 'nx/src/utils/package-manager';
|
||||||
import { resolvePackageVersion } from './package-manager';
|
import { resolvePackageVersion } from './package-manager';
|
||||||
@ -29,42 +27,16 @@ const latestCompatibleAngularMajorVersion = Math.max(
|
|||||||
export async function determineMigration(
|
export async function determineMigration(
|
||||||
version: string | undefined
|
version: string | undefined
|
||||||
): Promise<MigrationDefinition> {
|
): Promise<MigrationDefinition> {
|
||||||
|
if (version) {
|
||||||
|
return { packageName: '@nrwl/angular', version };
|
||||||
|
}
|
||||||
|
|
||||||
const angularVersion = getInstalledAngularVersion();
|
const angularVersion = getInstalledAngularVersion();
|
||||||
const majorAngularVersion = major(angularVersion);
|
const majorAngularVersion = major(angularVersion);
|
||||||
latestWorkspaceVersionWithMigration = await resolvePackageVersion(
|
latestWorkspaceVersionWithMigration = await resolvePackageVersion(
|
||||||
'@nrwl/angular',
|
'@nrwl/angular',
|
||||||
latestWorkspaceRangeVersionWithMigration
|
latestWorkspaceRangeVersionWithMigration
|
||||||
);
|
);
|
||||||
|
|
||||||
if (version) {
|
|
||||||
const normalizedVersion = await normalizeVersion(version);
|
|
||||||
if (lte(normalizedVersion, latestWorkspaceVersionWithMigration)) {
|
|
||||||
// specified version should use @nrwl/workspace:ng-add
|
|
||||||
return { packageName: '@nrwl/workspace', version: normalizedVersion };
|
|
||||||
}
|
|
||||||
|
|
||||||
// if greater than the latest workspace version with the migration,
|
|
||||||
// check the versions map for compatibility with Angular
|
|
||||||
if (
|
|
||||||
nxAngularVersionMap[majorAngularVersion] &&
|
|
||||||
satisfies(
|
|
||||||
normalizedVersion,
|
|
||||||
nxAngularVersionMap[majorAngularVersion].range
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
// there's a match, use @nrwl/angular:ng-add
|
|
||||||
return { packageName: '@nrwl/angular', version: normalizedVersion };
|
|
||||||
}
|
|
||||||
|
|
||||||
// it's not compatible with the currently installed Angular version,
|
|
||||||
// suggest the latest possible version to use
|
|
||||||
return await findAndSuggestVersionToUse(
|
|
||||||
angularVersion,
|
|
||||||
majorAngularVersion,
|
|
||||||
version
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const latestNxCompatibleVersion =
|
const latestNxCompatibleVersion =
|
||||||
await getNxVersionBasedOnInstalledAngularVersion(
|
await getNxVersionBasedOnInstalledAngularVersion(
|
||||||
angularVersion,
|
angularVersion,
|
||||||
@ -101,41 +73,6 @@ export function migrateWorkspace(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function findAndSuggestVersionToUse(
|
|
||||||
angularVersion: string,
|
|
||||||
majorAngularVersion: number,
|
|
||||||
userSpecifiedVersion: string
|
|
||||||
): Promise<MigrationDefinition> {
|
|
||||||
const latestNxCompatibleVersion =
|
|
||||||
await getNxVersionBasedOnInstalledAngularVersion(
|
|
||||||
angularVersion,
|
|
||||||
majorAngularVersion
|
|
||||||
);
|
|
||||||
const useSuggestedVersion = await promptForVersion(latestNxCompatibleVersion);
|
|
||||||
if (useSuggestedVersion) {
|
|
||||||
// should use @nrwl/workspace:ng-add if the version is less than the
|
|
||||||
// latest workspace version that has the migration, otherwise use
|
|
||||||
// @nrwl/angular:ng-add
|
|
||||||
return {
|
|
||||||
packageName: lte(
|
|
||||||
latestNxCompatibleVersion,
|
|
||||||
latestWorkspaceVersionWithMigration
|
|
||||||
)
|
|
||||||
? '@nrwl/workspace'
|
|
||||||
: '@nrwl/angular',
|
|
||||||
version: latestNxCompatibleVersion,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
output.error({
|
|
||||||
title: `❌ Cannot proceed with the migration.`,
|
|
||||||
bodyLines: [
|
|
||||||
`The specified Nx version "${userSpecifiedVersion}" is not compatible with the installed Angular version "${angularVersion}".`,
|
|
||||||
],
|
|
||||||
});
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getNxVersionBasedOnInstalledAngularVersion(
|
async function getNxVersionBasedOnInstalledAngularVersion(
|
||||||
angularVersion: string,
|
angularVersion: string,
|
||||||
majorAngularVersion: number
|
majorAngularVersion: number
|
||||||
@ -162,31 +99,6 @@ async function getNxVersionBasedOnInstalledAngularVersion(
|
|||||||
return await resolvePackageVersion('@nrwl/angular', 'latest');
|
return await resolvePackageVersion('@nrwl/angular', 'latest');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function promptForVersion(version: string): Promise<boolean> {
|
|
||||||
const { useVersion } = await prompt<{ useVersion: boolean }>([
|
|
||||||
{
|
|
||||||
name: 'useVersion',
|
|
||||||
message: `The provided version of Nx is not compatible with the installed Angular CLI version. Would you like to use the recommended version "${version}" instead?`,
|
|
||||||
type: 'confirm',
|
|
||||||
initial: true,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
return useVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getInstalledAngularVersion(): string {
|
function getInstalledAngularVersion(): string {
|
||||||
return readModulePackageJson('@angular/core').packageJson.version;
|
return readModulePackageJson('@angular/core').packageJson.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function normalizeVersion(version: string): Promise<string> {
|
|
||||||
if (
|
|
||||||
version.startsWith('^') ||
|
|
||||||
version.startsWith('~') ||
|
|
||||||
version.split('.').length < 3
|
|
||||||
) {
|
|
||||||
return await resolvePackageVersion('@nrwl/angular', version);
|
|
||||||
}
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user