diff --git a/packages/devkit/package.json b/packages/devkit/package.json index e48dfd25efa0ed..67576f16f7e140 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 7f19f17f3acc0c..a3a55eb2d3f824 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], + }); } }