From 19872516c0e8b8986c0f22df74160f7601a888a5 Mon Sep 17 00:00:00 2001 From: Jason Jean Date: Tue, 26 Apr 2022 14:39:18 -0400 Subject: [PATCH] fix(core): fix having multiple versions of nx/devkit (#9998) --- .../bin/create-nx-workspace.ts | 8 +++-- packages/devkit/package.json | 4 ++- .../devkit/src/tasks/install-packages-task.ts | 35 ++++++++++--------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/packages/create-nx-workspace/bin/create-nx-workspace.ts b/packages/create-nx-workspace/bin/create-nx-workspace.ts index 8817154e7c6b7..55e258b7951a6 100644 --- a/packages/create-nx-workspace/bin/create-nx-workspace.ts +++ b/packages/create-nx-workspace/bin/create-nx-workspace.ts @@ -28,7 +28,7 @@ type Arguments = { style: string; nxCloud: boolean; allPrompts: boolean; - packageManager: string; + packageManager: PackageManager; defaultBase: string; }; @@ -605,11 +605,13 @@ async function determineStyle( return Promise.resolve(parsedArgs.style); } -async function createSandbox(packageManager: string) { +async function createSandbox(packageManager: PackageManager) { const installSpinner = ora( `Installing dependencies with ${packageManager}` ).start(); + const { install } = getPackageManagerCommand(packageManager); + const tmpDir = dirSync().name; try { writeFileSync( @@ -625,7 +627,7 @@ async function createSandbox(packageManager: string) { }) ); - await execAndWait(`${packageManager} install --silent`, tmpDir); + await execAndWait(`${install} --silent`, tmpDir); installSpinner.succeed(); } catch (e) { diff --git a/packages/devkit/package.json b/packages/devkit/package.json index e48dfd25efa0e..67576f16f7e14 100644 --- a/packages/devkit/package.json +++ b/packages/devkit/package.json @@ -27,11 +27,13 @@ }, "homepage": "https://nx.dev", "dependencies": { - "nx": "*", "ejs": "^3.1.5", "ignore": "^5.0.4", "rxjs": "^6.5.4", "semver": "7.3.4", "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 13.10 <= 15" } } diff --git a/packages/devkit/src/tasks/install-packages-task.ts b/packages/devkit/src/tasks/install-packages-task.ts index 7f19f17f3acc0..a3a55eb2d3f82 100644 --- a/packages/devkit/src/tasks/install-packages-task.ts +++ b/packages/devkit/src/tasks/install-packages-task.ts @@ -8,8 +8,6 @@ import { import type { PackageManager } from 'nx/src/utils/package-manager'; import { joinPathFragments } from 'nx/src/utils/path'; -let storedPackageJsonValue: string; - /** * Runs `npm install` or `yarn install`. It will skip running the install if * `package.json` hasn't changed at all or it hasn't changed since the last invocation. @@ -23,24 +21,27 @@ export function installPackagesTask( cwd: string = '', packageManager: PackageManager = detectPackageManager(cwd) ): void { + if ( + !tree + .listChanges() + .find((f) => f.path === joinPathFragments(cwd, 'package.json')) && + !alwaysRun + ) { + return; + } + const packageJsonValue = tree.read( joinPathFragments(cwd, 'package.json'), 'utf-8' ); - if ( - tree - .listChanges() - .find((f) => f.path === joinPathFragments(cwd, 'package.json')) || - alwaysRun - ) { - // Don't install again if install was already executed with package.json - if (storedPackageJsonValue != packageJsonValue || alwaysRun) { - storedPackageJsonValue = packageJsonValue; - const pmc = getPackageManagerCommand(packageManager); - execSync(pmc.install, { - cwd: join(tree.root, cwd), - stdio: [0, 1, 2], - }); - } + let storedPackageJsonValue: string = global['__packageJsonInstallCache__']; + // Don't install again if install was already executed with package.json + if (storedPackageJsonValue != packageJsonValue || alwaysRun) { + global['__packageJsonInstallCache__'] = packageJsonValue; + const pmc = getPackageManagerCommand(packageManager); + execSync(pmc.install, { + cwd: join(tree.root, cwd), + stdio: [0, 1, 2], + }); } }