mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-19 20:52:06 +08:00
Angular 5.0+ has a full peer dependencies setup (with 6.0+ also having a configurable runtime error check) to ensure that an appropriate version of typescript is available for compilation. Angular CLI 8.0+ does not support Angular versions prior to these and therefore the warning is redundant. For the case where the developer wishes to use an unsupported TypeScript version, the developer would need to adjust two similar but differently name settings in two different configuration files.
113 lines
4.3 KiB
TypeScript
113 lines
4.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import { tags, terminal } from '@angular-devkit/core';
|
|
import { resolve } from '@angular-devkit/core/node';
|
|
import * as path from 'path';
|
|
import { SemVer } from 'semver';
|
|
|
|
|
|
export class Version {
|
|
private _semver: SemVer | null = null;
|
|
constructor(private _version: string | null = null) {
|
|
this._semver = _version ? new SemVer(_version) : null;
|
|
}
|
|
|
|
isAlpha() { return this.qualifier == 'alpha'; }
|
|
isBeta() { return this.qualifier == 'beta'; }
|
|
isReleaseCandidate() { return this.qualifier == 'rc'; }
|
|
isKnown() { return this._version !== null; }
|
|
|
|
isLocal() { return this.isKnown() && this._version && path.isAbsolute(this._version); }
|
|
isGreaterThanOrEqualTo(other: SemVer) {
|
|
return this._semver !== null && this._semver.compare(other) >= 0;
|
|
}
|
|
|
|
get major() { return this._semver ? this._semver.major : 0; }
|
|
get minor() { return this._semver ? this._semver.minor : 0; }
|
|
get patch() { return this._semver ? this._semver.patch : 0; }
|
|
get qualifier() { return this._semver ? this._semver.prerelease[0] : ''; }
|
|
get extra() { return this._semver ? this._semver.prerelease[1] : ''; }
|
|
|
|
toString() { return this._version; }
|
|
|
|
static assertCompatibleAngularVersion(projectRoot: string) {
|
|
let angularPkgJson;
|
|
let rxjsPkgJson;
|
|
|
|
try {
|
|
const resolveOptions = {
|
|
basedir: projectRoot,
|
|
checkGlobal: false,
|
|
checkLocal: true,
|
|
};
|
|
const angularPackagePath = resolve('@angular/core/package.json', resolveOptions);
|
|
const rxjsPackagePath = resolve('rxjs/package.json', resolveOptions);
|
|
|
|
angularPkgJson = require(angularPackagePath);
|
|
rxjsPkgJson = require(rxjsPackagePath);
|
|
} catch {
|
|
console.error(terminal.bold(terminal.red(tags.stripIndents`
|
|
You seem to not be depending on "@angular/core" and/or "rxjs". This is an error.
|
|
`)));
|
|
process.exit(2);
|
|
}
|
|
|
|
if (!(angularPkgJson && angularPkgJson['version'] && rxjsPkgJson && rxjsPkgJson['version'])) {
|
|
console.error(terminal.bold(terminal.red(tags.stripIndents`
|
|
Cannot determine versions of "@angular/core" and/or "rxjs".
|
|
This likely means your local installation is broken. Please reinstall your packages.
|
|
`)));
|
|
process.exit(2);
|
|
}
|
|
|
|
const angularVersion = new Version(angularPkgJson['version']);
|
|
const rxjsVersion = new Version(rxjsPkgJson['version']);
|
|
|
|
if (angularVersion.isLocal()) {
|
|
console.error(terminal.yellow('Using a local version of angular. Proceeding with care...'));
|
|
|
|
return;
|
|
}
|
|
|
|
if (!angularVersion.isGreaterThanOrEqualTo(new SemVer('5.0.0'))) {
|
|
console.error(terminal.bold(terminal.red(tags.stripIndents`
|
|
This version of CLI is only compatible with Angular version 5.0.0 or higher.
|
|
|
|
Please visit the link below to find instructions on how to update Angular.
|
|
https://angular-update-guide.firebaseapp.com/
|
|
` + '\n')));
|
|
process.exit(3);
|
|
} else if (
|
|
angularVersion.isGreaterThanOrEqualTo(new SemVer('6.0.0-rc.0'))
|
|
&& !rxjsVersion.isGreaterThanOrEqualTo(new SemVer('5.6.0-forward-compat.0'))
|
|
&& !rxjsVersion.isGreaterThanOrEqualTo(new SemVer('6.0.0-beta.0'))
|
|
) {
|
|
console.error(terminal.bold(terminal.red(tags.stripIndents`
|
|
This project uses version ${rxjsVersion} of RxJs, which is not supported by Angular v6.
|
|
The official RxJs version that is supported is 5.6.0-forward-compat.0 and greater.
|
|
|
|
Please visit the link below to find instructions on how to update RxJs.
|
|
https://docs.google.com/document/d/12nlLt71VLKb-z3YaSGzUfx6mJbc34nsMXtByPUN35cg/edit#
|
|
` + '\n')));
|
|
process.exit(3);
|
|
} else if (
|
|
angularVersion.isGreaterThanOrEqualTo(new SemVer('6.0.0-rc.0'))
|
|
&& !rxjsVersion.isGreaterThanOrEqualTo(new SemVer('6.0.0-beta.0'))
|
|
) {
|
|
console.warn(terminal.bold(terminal.red(tags.stripIndents`
|
|
This project uses a temporary compatibility version of RxJs (${rxjsVersion}).
|
|
|
|
Please visit the link below to find instructions on how to update RxJs.
|
|
https://docs.google.com/document/d/12nlLt71VLKb-z3YaSGzUfx6mJbc34nsMXtByPUN35cg/edit#
|
|
` + '\n')));
|
|
}
|
|
}
|
|
|
|
}
|