Describe the bug
In a project configured to use pnpm, running a package script through vpr causes npm-run-all2 / run-p to invoke child scripts with npm instead of pnpm.
The same script works correctly when launched with pnpm run.
The project declares pnpm as its package manager. When run-p is launched by pnpm, it correctly uses pnpm for the child scripts. When it is launched by vpr, it falls back to npm, which then fails with EBADDEVENGINES because the project only permits pnpm.
Expected behavior:
vpr check should preserve enough package-manager lifecycle environment for child process runners to detect pnpm.
- Child scripts should be executed using pnpm, consistently with
pnpm run check.
Actual behavior:
pnpm run check succeeds.
vpr check causes run-p to invoke npm for the child scripts.
- npm fails because
devEngines.packageManager requires pnpm.
This appears to happen because the environment provided by vpr differs from the environment provided by pnpm run, particularly package-manager lifecycle variables such as npm_execpath.
A serial workaround that explicitly invokes pnpm works, but it loses parallel execution. In my project, the parallel command takes 3.94 seconds, while the serial workaround takes 6.35 seconds.
Reproduction
https://github.com/bling-yshs/vue-demo/tree/archive/vp
Steps to reproduce
-
Clone the reproduction repository.
-
Install dependencies:
-
Run the parallel script directly through pnpm:
All three child scripts complete successfully.
-
Run the same script through Vite+:
-
Observe that npm-run-all2 invokes the child scripts using npm instead of pnpm. npm then exits with EBADDEVENGINES because the project declares pnpm in devEngines.packageManager.
System Info
D:/code/Webstorm/vue-demo
$ vp env current
VITE+ - The Unified Toolchain for the Web
Environment:
Version 24.19.0
Source .node-version
Source Path D:\code\Webstorm\vue-demo\.node-version
Project Root D:\code\Webstorm\vue-demo
Tool Paths:
node C:\Users\yshs\.vite-plus\js_runtime\node\24.19.0\node.exe
npm C:\Users\yshs\.vite-plus\js_runtime\node\24.19.0\npm.cmd
npx C:\Users\yshs\.vite-plus\js_runtime\node\24.19.0\npx.cmd
Package Manager:
Name pnpm
Version 11.20.0
Source devEngines.packageManager
Source Path D:\code\Webstorm\vue-demo\package.json
Project Root D:\code\Webstorm\vue-demo
Bin Path C:\Users\yshs\.vite-plus\package_manager\pnpm\11.20.0\pnpm\bin\pnpm.cmd
D:/code/Webstorm/vue-demo
$ vp --version
VITE+ - The Unified Toolchain for the Web
vp v0.2.7
Local vite-plus:
vite-plus v0.2.7
Tools:
vite v8.1.5
rolldown v1.2.0
vitest v4.1.10
oxfmt v0.60.0
oxlint v1.75.0
oxlint-tsgolint v7.0.2001
tsdown v0.22.14
Environment:
Package manager pnpm v11.20.0
Node.js v24.19.0 (.node-version)
Used Package Manager
pnpm
Logs
Validations
Describe the bug
In a project configured to use pnpm, running a package script through
vprcausesnpm-run-all2/run-pto invoke child scripts with npm instead of pnpm.The same script works correctly when launched with
pnpm run.The project declares pnpm as its package manager. When
run-pis launched by pnpm, it correctly uses pnpm for the child scripts. When it is launched byvpr, it falls back to npm, which then fails withEBADDEVENGINESbecause the project only permits pnpm.Expected behavior:
vpr checkshould preserve enough package-manager lifecycle environment for child process runners to detect pnpm.pnpm run check.Actual behavior:
pnpm run checksucceeds.vpr checkcausesrun-pto invoke npm for the child scripts.devEngines.packageManagerrequires pnpm.This appears to happen because the environment provided by
vprdiffers from the environment provided bypnpm run, particularly package-manager lifecycle variables such asnpm_execpath.A serial workaround that explicitly invokes pnpm works, but it loses parallel execution. In my project, the parallel command takes 3.94 seconds, while the serial workaround takes 6.35 seconds.
Reproduction
https://github.com/bling-yshs/vue-demo/tree/archive/vp
Steps to reproduce
Clone the reproduction repository.
Install dependencies:
Run the parallel script directly through pnpm:
All three child scripts complete successfully.
Run the same script through Vite+:
Observe that
npm-run-all2invokes the child scripts using npm instead of pnpm. npm then exits withEBADDEVENGINESbecause the project declares pnpm indevEngines.packageManager.System Info
Used Package Manager
pnpm
Logs
Validations