From 4cbe93b4f29edd06e5a53f78be17d9f0477963d0 Mon Sep 17 00:00:00 2001 From: Miroslav Jonas Date: Thu, 17 Aug 2023 11:01:40 +0200 Subject: [PATCH] fix(core): ensure preinstall is only run once on repo, not on every deps change --- packages/devkit/src/tasks/install-packages-task.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/devkit/src/tasks/install-packages-task.ts b/packages/devkit/src/tasks/install-packages-task.ts index 05adbf0632a61..2426fc95c62df 100644 --- a/packages/devkit/src/tasks/install-packages-task.ts +++ b/packages/devkit/src/tasks/install-packages-task.ts @@ -4,6 +4,7 @@ import { requireNx } from '../../nx'; import type { Tree } from 'nx/src/generators/tree'; import type { PackageManager } from 'nx/src/utils/package-manager'; +import { existsSync } from 'fs'; const { detectPackageManager, getPackageManagerCommand, joinPathFragments } = requireNx(); @@ -42,7 +43,9 @@ export function installPackagesTask( cwd: join(tree.root, cwd), stdio: process.env.NX_GENERATE_QUIET === 'true' ? 'ignore' : 'inherit', }; - if (pmc.preInstall) { + // only run preinstall if install hasn't been run yet + // this only happens during CNW when preset is adding its dependencies + if (pmc.preInstall && !existsSync(joinPathFragments(cwd, 'node_modules'))) { execSync(pmc.preInstall, execSyncOptions); } execSync(pmc.install, execSyncOptions);