forked from nrwl/nx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
package-manager.ts
67 lines (59 loc) · 1.94 KB
/
package-manager.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import {
getPackageManagerCommand,
readJsonFile,
workspaceRoot,
} from '@nrwl/devkit';
import { execSync } from 'child_process';
import { writeFileSync } from 'fs';
import { sortObjectByKeys } from 'nx/src/utils/object-sort';
import {
resolvePackageVersionUsingInstallation,
resolvePackageVersionUsingRegistry,
} from 'nx/src/utils/package-manager';
import { join } from 'path';
import { gte, major } from 'semver';
import { MigrationDefinition } from './types';
// version when the Nx CLI changed from @nrwl/tao & @nrwl/cli to nx
const versionWithConsolidatedPackages = '13.9.0';
export function installDependencies(
{ packageName, version }: MigrationDefinition,
useNxCloud: boolean
): void {
const json = readJsonFile(join(workspaceRoot, 'package.json'));
json.devDependencies ??= {};
json.devDependencies['@nrwl/workspace'] = version;
if (gte(version, versionWithConsolidatedPackages)) {
json.devDependencies['nx'] = version;
} else {
json.devDependencies['@nrwl/cli'] = version;
json.devDependencies['@nrwl/tao'] = version;
}
if (useNxCloud) {
// get the latest @nrwl/nx-cloud version compatible with the Nx major
// version being installed
json.devDependencies['@nrwl/nx-cloud'] = resolvePackageVersion(
'@nrwl/nx-cloud',
`^${major(version)}.0.0`
);
}
json.devDependencies = sortObjectByKeys(json.devDependencies);
if (packageName === '@nrwl/angular') {
json.dependencies ??= {};
json.dependencies['@nrwl/angular'] = version;
json.dependencies = sortObjectByKeys(json.dependencies);
}
writeFileSync(`package.json`, JSON.stringify(json, null, 2));
execSync(getPackageManagerCommand().install, {
stdio: [0, 1, 2],
});
}
export function resolvePackageVersion(
packageName: string,
version: string
): string {
try {
return resolvePackageVersionUsingRegistry(packageName, version);
} catch {
return resolvePackageVersionUsingInstallation(packageName, version);
}
}