From 09be513439d577cf35a4e6b36642926ce3e5694e Mon Sep 17 00:00:00 2001 From: Jason Jean Date: Wed, 5 Feb 2025 12:52:54 -0500 Subject: [PATCH] fix(core): do not use revokable proxy (#29878) ## Current Behavior `preTaskExecution` hooks used a revocable proxy to monitor updates to `process.env` then revoking them. Apparently, this also prevents them from being accessed afterwards which is definitely not intentional. ## Expected Behavior `preTaskExecution` hooks use a normal (non-revocable) proxy and restores `process.env.` to the un-proxied version. ## Related Issue(s) Fixes # --- .../project-graph/plugins/loaded-nx-plugin.ts | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/packages/nx/src/project-graph/plugins/loaded-nx-plugin.ts b/packages/nx/src/project-graph/plugins/loaded-nx-plugin.ts index c27cc5886c..d07cf879a0 100644 --- a/packages/nx/src/project-graph/plugins/loaded-nx-plugin.ts +++ b/packages/nx/src/project-graph/plugins/loaded-nx-plugin.ts @@ -121,26 +121,19 @@ export class LoadedNxPlugin { if (plugin.preTasksExecution) { this.preTasksExecution = async (context: PreTasksExecutionContext) => { const updates = {}; - let revokeFn: () => void; + let originalEnv = process.env; if (isIsolationEnabled() || isDaemonEnabled()) { - const { proxy, revoke } = Proxy.revocable( - process.env, - { - set: (target, key: string, value) => { - target[key] = value; - updates[key] = value; - return true; - }, - } - ); - process.env = proxy; - revokeFn = revoke; + process.env = new Proxy(originalEnv, { + set: (target, key: string, value) => { + target[key] = value; + updates[key] = value; + return true; + }, + }); } await plugin.preTasksExecution(this.options, context); + process.env = originalEnv; - if (revokeFn) { - revokeFn(); - } return updates; }; }