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 { prompt } from 'enquirer';
|
||||
import { lt, lte, major, satisfies } from 'semver';
|
||||
import { output } from 'nx/src/utils/output';
|
||||
import { lt, lte, major } from 'semver';
|
||||
import { readModulePackageJson } from 'nx/src/utils/package-json';
|
||||
import { PackageManagerCommands } from 'nx/src/utils/package-manager';
|
||||
import { resolvePackageVersion } from './package-manager';
|
||||
@ -29,42 +27,16 @@ const latestCompatibleAngularMajorVersion = Math.max(
|
||||
export async function determineMigration(
|
||||
version: string | undefined
|
||||
): Promise<MigrationDefinition> {
|
||||
if (version) {
|
||||
return { packageName: '@nrwl/angular', version };
|
||||
}
|
||||
|
||||
const angularVersion = getInstalledAngularVersion();
|
||||
const majorAngularVersion = major(angularVersion);
|
||||
latestWorkspaceVersionWithMigration = await resolvePackageVersion(
|
||||
'@nrwl/angular',
|
||||
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 =
|
||||
await getNxVersionBasedOnInstalledAngularVersion(
|
||||
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(
|
||||
angularVersion: string,
|
||||
majorAngularVersion: number
|
||||
@ -162,31 +99,6 @@ async function getNxVersionBasedOnInstalledAngularVersion(
|
||||
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 {
|
||||
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