From 38516f562d6f646b82f57fb213e30b3067abe44e Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Wed, 24 Jun 2026 22:23:09 +0800 Subject: [PATCH 1/8] fix(env): preserve managed npm in node child processes --- crates/vite_global_cli/src/shim/dispatch.rs | 21 +++++++++++++++++ .../index.js | 23 +++++++++++++++++++ .../package.json | 18 +++++++++++++++ .../snap.txt | 2 ++ .../steps.json | 4 ++++ 5 files changed, 68 insertions(+) create mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js create mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json create mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt create mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json diff --git a/crates/vite_global_cli/src/shim/dispatch.rs b/crates/vite_global_cli/src/shim/dispatch.rs index c4c1e7f606..eb149ae889 100644 --- a/crates/vite_global_cli/src/shim/dispatch.rs +++ b/crates/vite_global_cli/src/shim/dispatch.rs @@ -714,6 +714,15 @@ async fn resolve_matching_package_manager_tool( Ok(Some(package_manager_bin_path(&install_dir, bin_name))) } +async fn resolve_declared_npm_bin_dir( + cwd: &AbsolutePath, +) -> Result, Error> { + let Some(npm_path) = resolve_matching_package_manager_tool(cwd, "npm").await? else { + return Ok(None); + }; + Ok(npm_path.parent().map(AbsolutePath::to_absolute_path_buf)) +} + /// Main shim dispatch entry point. /// /// Called when the binary is invoked as node, npm, npx, corepack, or a @@ -862,6 +871,18 @@ pub async fn dispatch(tool: &str, args: &[String]) -> i32 { // nested invocations see the same PM version while recursion prevention is set. let node_bin_dir = node_path.parent().expect("Node has no parent directory"); let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); + if tool == "node" { + match resolve_declared_npm_bin_dir(&cwd).await { + Ok(Some(pm_bin_dir)) if pm_bin_dir != node_bin_dir => { + let _ = prepend_to_path_env(&pm_bin_dir, PrependOptions::default()); + } + Ok(_) => {} + Err(e) => { + eprintln!("vp: Failed to resolve package manager for node child process PATH: {e}"); + return 1; + } + } + } if let Some(pm_bin_dir) = tool_path.parent() && pm_bin_dir != node_bin_dir { diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js new file mode 100644 index 0000000000..b67e95b1c1 --- /dev/null +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js @@ -0,0 +1,23 @@ +import { execFileSync } from 'node:child_process'; + +const expectedVersion = '11.17.0'; + +const npmPath = execFileSync('which', ['npm'], { encoding: 'utf8' }).trim(); +const versionOutput = execFileSync('npm', ['--version'], { encoding: 'utf8' }).trim(); +const version = versionOutput.split(/\r?\n/).at(-1); +const normalizedNpmPath = npmPath.split('/').join('/'); + +if (version !== expectedVersion) { + console.error(`Expected npm ${expectedVersion}, got ${versionOutput}`); + process.exit(1); +} + +if ( + !normalizedNpmPath.includes(`/package_manager/npm/${expectedVersion}/npm/bin/npm`) || + normalizedNpmPath.includes('/js_runtime/node/') +) { + console.error(`Expected managed npm path, got ${npmPath}`); + process.exit(1); +} + +console.log('node child process uses managed npm'); diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json new file mode 100644 index 0000000000..a68d37c6be --- /dev/null +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json @@ -0,0 +1,18 @@ +{ + "name": "node-child-process-managed-npm-path", + "version": "1.0.0", + "private": true, + "type": "module", + "devEngines": { + "runtime": { + "name": "node", + "version": "20.18.0", + "onFail": "download" + }, + "packageManager": { + "name": "npm", + "version": "11.17.0", + "onFail": "download" + } + } +} diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt new file mode 100644 index 0000000000..2951328be4 --- /dev/null +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt @@ -0,0 +1,2 @@ +> node index.js +node child process uses managed npm diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json new file mode 100644 index 0000000000..cadc237a9a --- /dev/null +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json @@ -0,0 +1,4 @@ +{ + "ignoredPlatforms": ["win32"], + "commands": ["node index.js"] +} From 5881481d2189c1c551b8fe9513e6f878affc8b2e Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Wed, 24 Jun 2026 22:35:59 +0800 Subject: [PATCH 2/8] fix(env): apply managed npm path to js shim execution --- crates/vite_global_cli/src/shim/dispatch.rs | 43 ++++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/crates/vite_global_cli/src/shim/dispatch.rs b/crates/vite_global_cli/src/shim/dispatch.rs index eb149ae889..12cad62d85 100644 --- a/crates/vite_global_cli/src/shim/dispatch.rs +++ b/crates/vite_global_cli/src/shim/dispatch.rs @@ -714,13 +714,19 @@ async fn resolve_matching_package_manager_tool( Ok(Some(package_manager_bin_path(&install_dir, bin_name))) } -async fn resolve_declared_npm_bin_dir( +async fn prepend_declared_npm_bin_dir_to_path_env( cwd: &AbsolutePath, -) -> Result, Error> { + node_bin_dir: &AbsolutePath, +) -> Result<(), Error> { let Some(npm_path) = resolve_matching_package_manager_tool(cwd, "npm").await? else { - return Ok(None); + return Ok(()); }; - Ok(npm_path.parent().map(AbsolutePath::to_absolute_path_buf)) + if let Some(pm_bin_dir) = npm_path.parent() + && pm_bin_dir != node_bin_dir + { + let _ = prepend_to_path_env(pm_bin_dir, PrependOptions::default()); + } + Ok(()) } /// Main shim dispatch entry point. @@ -871,17 +877,9 @@ pub async fn dispatch(tool: &str, args: &[String]) -> i32 { // nested invocations see the same PM version while recursion prevention is set. let node_bin_dir = node_path.parent().expect("Node has no parent directory"); let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); - if tool == "node" { - match resolve_declared_npm_bin_dir(&cwd).await { - Ok(Some(pm_bin_dir)) if pm_bin_dir != node_bin_dir => { - let _ = prepend_to_path_env(&pm_bin_dir, PrependOptions::default()); - } - Ok(_) => {} - Err(e) => { - eprintln!("vp: Failed to resolve package manager for node child process PATH: {e}"); - return 1; - } - } + if let Err(e) = prepend_declared_npm_bin_dir_to_path_env(&cwd, node_bin_dir).await { + eprintln!("vp: Failed to resolve package manager for child process PATH: {e}"); + return 1; } if let Some(pm_bin_dir) = tool_path.parent() && pm_bin_dir != node_bin_dir @@ -985,6 +983,16 @@ async fn dispatch_package_binary(tool: &str, args: &[String]) -> i32 { node_bin_dir, PrependOptions::default(), ); + if let Err(e) = + prepend_declared_npm_bin_dir_to_path_env(&cwd, node_bin_dir) + .await + { + eprintln!( + "vp: Failed to resolve package manager for child \ + process PATH: {e}" + ); + return 1; + } } } Err(e) => { @@ -1088,6 +1096,11 @@ pub(crate) async fn package_binary_invocation( let node_bin_dir = node_path.parent().ok_or_else(|| "Node has no parent directory".to_string())?; let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); + if let Ok(cwd) = current_dir() { + prepend_declared_npm_bin_dir_to_path_env(&cwd, node_bin_dir).await.map_err(|e| { + format!("Failed to resolve package manager for child process PATH: {e}") + })?; + } // JS binaries (determined at install time and stored in metadata) run // through node; native executables run directly. From 4317eb15a0d0856f6a1764cbc8e2a835e2dda5f5 Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Wed, 24 Jun 2026 22:59:47 +0800 Subject: [PATCH 3/8] fix fmt --- .../node-child-process-managed-npm-path/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json index a68d37c6be..f260787451 100644 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json @@ -4,15 +4,15 @@ "private": true, "type": "module", "devEngines": { - "runtime": { - "name": "node", - "version": "20.18.0", - "onFail": "download" - }, "packageManager": { "name": "npm", "version": "11.17.0", "onFail": "download" + }, + "runtime": { + "name": "node", + "version": "20.18.0", + "onFail": "download" } } } From 146d61f02bb5602495705cef7ccdc1c788b3b560 Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Wed, 24 Jun 2026 23:02:34 +0800 Subject: [PATCH 4/8] test(cli): split managed npm snap steps --- .../node-child-process-managed-npm-path/snap.txt | 3 +++ .../node-child-process-managed-npm-path/steps.json | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt index 2951328be4..21e534e435 100644 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt @@ -1,2 +1,5 @@ +> test "$(npm --version)" = "11.17.0" && echo "direct npm uses managed npm" +direct npm uses managed npm + > node index.js node child process uses managed npm diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json index cadc237a9a..501ffb252c 100644 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json @@ -1,4 +1,7 @@ { "ignoredPlatforms": ["win32"], - "commands": ["node index.js"] + "commands": [ + "test \"$(npm --version)\" = \"11.17.0\" && echo \"direct npm uses managed npm\"", + "node index.js" + ] } From 75846ddb9e09c74e392e2985d36bb5f5aba60603 Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Wed, 24 Jun 2026 23:19:26 +0800 Subject: [PATCH 5/8] enhance --- .../node-child-process-managed-npm-path/index.js | 2 +- .../node-child-process-managed-npm-path/snap.txt | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js index b67e95b1c1..5dfc6eaa05 100644 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js @@ -20,4 +20,4 @@ if ( process.exit(1); } -console.log('node child process uses managed npm'); +console.log(`node child process uses managed npm \n${npmPath} \n${version}`); diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt index 21e534e435..385ace9a8d 100644 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt +++ b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt @@ -2,4 +2,6 @@ direct npm uses managed npm > node index.js -node child process uses managed npm +node child process uses managed npm +/package_manager/npm//npm/bin/npm + From 3a8d7503aa50605a5779dedd469947babfa8c2fc Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Wed, 24 Jun 2026 23:25:18 +0800 Subject: [PATCH 6/8] wip --- crates/vite_global_cli/src/shim/dispatch.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/crates/vite_global_cli/src/shim/dispatch.rs b/crates/vite_global_cli/src/shim/dispatch.rs index 12cad62d85..7ef124d155 100644 --- a/crates/vite_global_cli/src/shim/dispatch.rs +++ b/crates/vite_global_cli/src/shim/dispatch.rs @@ -714,10 +714,12 @@ async fn resolve_matching_package_manager_tool( Ok(Some(package_manager_bin_path(&install_dir, bin_name))) } -async fn prepend_declared_npm_bin_dir_to_path_env( +async fn prepend_js_child_process_path_env( cwd: &AbsolutePath, node_bin_dir: &AbsolutePath, ) -> Result<(), Error> { + let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); + let Some(npm_path) = resolve_matching_package_manager_tool(cwd, "npm").await? else { return Ok(()); }; @@ -876,8 +878,7 @@ pub async fn dispatch(tool: &str, args: &[String]) -> i32 { // version was selected from `packageManager`, put that PM bin dir first so // nested invocations see the same PM version while recursion prevention is set. let node_bin_dir = node_path.parent().expect("Node has no parent directory"); - let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); - if let Err(e) = prepend_declared_npm_bin_dir_to_path_env(&cwd, node_bin_dir).await { + if let Err(e) = prepend_js_child_process_path_env(&cwd, node_bin_dir).await { eprintln!("vp: Failed to resolve package manager for child process PATH: {e}"); return 1; } @@ -979,13 +980,8 @@ async fn dispatch_package_binary(tool: &str, args: &[String]) -> i32 { match ensure_installed(&node_version).await { Ok(node_path) => { if let Some(node_bin_dir) = node_path.parent() { - let _ = prepend_to_path_env( - node_bin_dir, - PrependOptions::default(), - ); if let Err(e) = - prepend_declared_npm_bin_dir_to_path_env(&cwd, node_bin_dir) - .await + prepend_js_child_process_path_env(&cwd, node_bin_dir).await { eprintln!( "vp: Failed to resolve package manager for child \ @@ -1095,11 +1091,12 @@ pub(crate) async fn package_binary_invocation( // Prepare environment for recursive invocations let node_bin_dir = node_path.parent().ok_or_else(|| "Node has no parent directory".to_string())?; - let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); if let Ok(cwd) = current_dir() { - prepend_declared_npm_bin_dir_to_path_env(&cwd, node_bin_dir).await.map_err(|e| { + prepend_js_child_process_path_env(&cwd, node_bin_dir).await.map_err(|e| { format!("Failed to resolve package manager for child process PATH: {e}") })?; + } else { + let _ = prepend_to_path_env(node_bin_dir, PrependOptions::default()); } // JS binaries (determined at install time and stored in metadata) run From 81fda915dffc4c49880d194f8090158601dba451 Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Thu, 25 Jun 2026 08:35:39 +0800 Subject: [PATCH 7/8] enhance --- .../node/package.json | 13 +++++++++++ .../env-node-child-process-npm/package.json | 3 +++ .../env-node-child-process-npm/print-path.js | 6 +++++ .../print-version.js | 6 +++++ .../env-node-child-process-npm/snap.txt | 5 ++++ .../specific}/package.json | 2 +- .../env-node-child-process-npm/steps.json | 7 ++++++ .../index.js | 23 ------------------- .../snap.txt | 7 ------ .../steps.json | 7 ------ 10 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/node/package.json create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/package.json create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/print-path.js create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/print-version.js create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt rename packages/cli/snap-tests-global/{node-child-process-managed-npm-path => env-node-child-process-npm/specific}/package.json (85%) create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/steps.json delete mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js delete mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt delete mode 100644 packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/node/package.json b/packages/cli/snap-tests-global/env-node-child-process-npm/node/package.json new file mode 100644 index 0000000000..9ee9eb71be --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/node/package.json @@ -0,0 +1,13 @@ +{ + "name": "@env-node-child-process-npm/node", + "version": "1.0.0", + "private": true, + "type": "module", + "devEngines": { + "runtime": { + "name": "node", + "version": "20.18.0", + "onFail": "download" + } + } +} diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/package.json b/packages/cli/snap-tests-global/env-node-child-process-npm/package.json new file mode 100644 index 0000000000..3dbc1ca591 --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/print-path.js b/packages/cli/snap-tests-global/env-node-child-process-npm/print-path.js new file mode 100644 index 0000000000..0312f10ab1 --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/print-path.js @@ -0,0 +1,6 @@ +import { execFileSync } from 'node:child_process'; + +const npmPath = execFileSync('which', ['npm'], { encoding: 'utf8' }).trim(); +const normalizedNpmPath = npmPath.split('/').join('/'); + +console.log(normalizedNpmPath); diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/print-version.js b/packages/cli/snap-tests-global/env-node-child-process-npm/print-version.js new file mode 100644 index 0000000000..f47dedf3d0 --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/print-version.js @@ -0,0 +1,6 @@ +import { execFileSync } from 'node:child_process'; + +const versionOutput = execFileSync('npm', ['--version'], { encoding: 'utf8' }).trim(); +const version = versionOutput.split(/\r?\n/).at(-1); + +console.log(version); diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt b/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt new file mode 100644 index 0000000000..9f0b30c3fb --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt @@ -0,0 +1,5 @@ +> cd node && test "$(npm --version)" = "$(node ../print-version.js)" && node ../print-path.js +/js_runtime/node//bin/npm + +> cd specific && test "$(npm --version)" = "$(node ../print-version.js)" && node ../print-path.js +/package_manager/npm//npm/bin/npm diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json b/packages/cli/snap-tests-global/env-node-child-process-npm/specific/package.json similarity index 85% rename from packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json rename to packages/cli/snap-tests-global/env-node-child-process-npm/specific/package.json index f260787451..7c485a7d28 100644 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/package.json +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/specific/package.json @@ -1,5 +1,5 @@ { - "name": "node-child-process-managed-npm-path", + "name": "@env-node-child-process-npm/specific", "version": "1.0.0", "private": true, "type": "module", diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json b/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json new file mode 100644 index 0000000000..217ed95088 --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json @@ -0,0 +1,7 @@ +{ + "ignoredPlatforms": ["win32"], + "commands": [ + "cd node && test \"$(npm --version)\" = \"$(node ../print-version.js)\" && node ../print-path.js", + "cd specific && test \"$(npm --version)\" = \"$(node ../print-version.js)\" && node ../print-path.js" + ] +} diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js deleted file mode 100644 index 5dfc6eaa05..0000000000 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import { execFileSync } from 'node:child_process'; - -const expectedVersion = '11.17.0'; - -const npmPath = execFileSync('which', ['npm'], { encoding: 'utf8' }).trim(); -const versionOutput = execFileSync('npm', ['--version'], { encoding: 'utf8' }).trim(); -const version = versionOutput.split(/\r?\n/).at(-1); -const normalizedNpmPath = npmPath.split('/').join('/'); - -if (version !== expectedVersion) { - console.error(`Expected npm ${expectedVersion}, got ${versionOutput}`); - process.exit(1); -} - -if ( - !normalizedNpmPath.includes(`/package_manager/npm/${expectedVersion}/npm/bin/npm`) || - normalizedNpmPath.includes('/js_runtime/node/') -) { - console.error(`Expected managed npm path, got ${npmPath}`); - process.exit(1); -} - -console.log(`node child process uses managed npm \n${npmPath} \n${version}`); diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt deleted file mode 100644 index 385ace9a8d..0000000000 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/snap.txt +++ /dev/null @@ -1,7 +0,0 @@ -> test "$(npm --version)" = "11.17.0" && echo "direct npm uses managed npm" -direct npm uses managed npm - -> node index.js -node child process uses managed npm -/package_manager/npm//npm/bin/npm - diff --git a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json b/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json deleted file mode 100644 index 501ffb252c..0000000000 --- a/packages/cli/snap-tests-global/node-child-process-managed-npm-path/steps.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ignoredPlatforms": ["win32"], - "commands": [ - "test \"$(npm --version)\" = \"11.17.0\" && echo \"direct npm uses managed npm\"", - "node index.js" - ] -} From 3876c035d69d037479a5b9d5f1f08e72764adfb4 Mon Sep 17 00:00:00 2001 From: Liang Mi Date: Thu, 25 Jun 2026 08:39:16 +0800 Subject: [PATCH 8/8] adjust --- .../cli/snap-tests-global/env-node-child-process-npm/snap.txt | 2 +- .../specific/print-package-json-pm-version.js | 3 +++ .../snap-tests-global/env-node-child-process-npm/steps.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 packages/cli/snap-tests-global/env-node-child-process-npm/specific/print-package-json-pm-version.js diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt b/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt index 9f0b30c3fb..fec9abd1ed 100644 --- a/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/snap.txt @@ -1,5 +1,5 @@ > cd node && test "$(npm --version)" = "$(node ../print-version.js)" && node ../print-path.js /js_runtime/node//bin/npm -> cd specific && test "$(npm --version)" = "$(node ../print-version.js)" && node ../print-path.js +> cd specific && test "$(npm --version)" = "$(node ../print-version.js)" && test "$(node ../print-version.js)" = "$(node ./print-package-json-pm-version.js)" && node ../print-path.js /package_manager/npm//npm/bin/npm diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/specific/print-package-json-pm-version.js b/packages/cli/snap-tests-global/env-node-child-process-npm/specific/print-package-json-pm-version.js new file mode 100644 index 0000000000..910648d9f2 --- /dev/null +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/specific/print-package-json-pm-version.js @@ -0,0 +1,3 @@ +import packageJson from './package.json' assert { type: 'json' }; + +console.log(packageJson.devEngines.packageManager.version); diff --git a/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json b/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json index 217ed95088..25c1117544 100644 --- a/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json +++ b/packages/cli/snap-tests-global/env-node-child-process-npm/steps.json @@ -2,6 +2,6 @@ "ignoredPlatforms": ["win32"], "commands": [ "cd node && test \"$(npm --version)\" = \"$(node ../print-version.js)\" && node ../print-path.js", - "cd specific && test \"$(npm --version)\" = \"$(node ../print-version.js)\" && node ../print-path.js" + "cd specific && test \"$(npm --version)\" = \"$(node ../print-version.js)\" && test \"$(node ../print-version.js)\" = \"$(node ./print-package-json-pm-version.js)\" && node ../print-path.js" ] }