Skip to content

Commit 13f375d

Browse files
clydinalan-agius4
authored andcommitted
fix(@angular/cli): use newer update command if global version is newer
This allows improvements and bugfixes in later versions of the update command to be used in projects with older versions of the Angular CLI that do not have bootstrapping (<8.3.13).
1 parent fd63e29 commit 13f375d

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

packages/angular/cli/lib/init.ts

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,33 +81,37 @@ if (process.env['NG_CLI_PROFILING']) {
8181
const projectLocalCli = require.resolve('@angular/cli', { paths: [process.cwd()] });
8282
cli = await import(projectLocalCli);
8383

84-
// This was run from a global, check local version.
85-
if (await isWarningEnabled('versionMismatch')) {
86-
const globalVersion = new SemVer(require('../package.json').version);
87-
88-
// Older versions might not have the VERSION export
89-
let localVersion = cli.VERSION?.full;
90-
if (!localVersion) {
91-
try {
92-
localVersion = require(path.join(path.dirname(projectLocalCli), '../../package.json'))
93-
.version;
94-
} catch (error) {
95-
// tslint:disable-next-line no-console
96-
console.error(
97-
'Version mismatch check skipped. Unable to retrieve local version: ' + error,
98-
);
99-
}
100-
}
84+
const globalVersion = new SemVer(require('../package.json').version);
10185

102-
let shouldWarn = false;
86+
// Older versions might not have the VERSION export
87+
let localVersion = cli.VERSION?.full;
88+
if (!localVersion) {
10389
try {
104-
shouldWarn = !!localVersion && globalVersion.compare(localVersion) > 0;
90+
localVersion = require(path.join(path.dirname(projectLocalCli), '../../package.json'))
91+
.version;
10592
} catch (error) {
10693
// tslint:disable-next-line no-console
107-
console.error('Version mismatch check skipped. Unable to compare local version: ' + error);
94+
console.error(
95+
'Version mismatch check skipped. Unable to retrieve local version: ' + error,
96+
);
10897
}
98+
}
99+
100+
let isGlobalGreater = false;
101+
try {
102+
isGlobalGreater = !!localVersion && globalVersion.compare(localVersion) > 0;
103+
} catch (error) {
104+
// tslint:disable-next-line no-console
105+
console.error('Version mismatch check skipped. Unable to compare local version: ' + error);
106+
}
109107

110-
if (shouldWarn) {
108+
if (isGlobalGreater) {
109+
// If using the update command and the global version is greater, use the newer update command
110+
// This allows improvements in update to be used in older versions that do not have bootstrapping
111+
if (process.argv[2] === 'update') {
112+
cli = await import('./cli');
113+
} else if (await isWarningEnabled('versionMismatch')) {
114+
// Otherwise, use local version and warn if global is newer than local
111115
const warning =
112116
`Your global Angular CLI version (${globalVersion}) is greater than your local ` +
113117
`version (${localVersion}). The local Angular CLI version is used.\n\n` +

0 commit comments

Comments
 (0)