Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

`vp env exec` / `vp node` ignore `nodeShimMode: system_first`, download a managed runtime (~192 MB) that `vp env clean` then refuses to remove

未关闭
#3,093 2 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@liangmiQwQ 已经在做这个了。

开始于 2026年10月17日。

  • #3100 来自 @liangmiQwQ —— 未关闭

评估

这个 Issue 还没有评估数据。

描述

pending triage

Summary

With nodeShimMode: system_first, vite-plus correctly resolves Node.js to the system runtime for the shims and for vp env current / vp env which. The vp env exec family -- which vp node is a shorthand for -- does not honour that preference: it resolves and downloads a vite-plus managed Node runtime instead.

This is not a matter of preference between two managed versions. It is a divergence between what vite-plus reports and what it dispatches, plus disk growth on a machine that explicitly opted out of Node management.

Expected vs actual

Configuration:

{
  "nodeShimMode": "system_first",
  "packageManagerShimModes": { "bun": "system_first", "npm": "system_first",
                               "pnpm": "system_first", "yarn": "system_first" }
}

What agrees with system_first:

$ node -v
v26.11.1
$ vp env which node
/usr/bin/node
$ vp env current
Node.js:
  Version    26.11.1
  Source     system PATH
  Bin Path   /usr/bin/node
  Mode       system_first

What does not:

$ vp node -v
v24.22.0
$ vp env exec node -v
v24.22.0

vp env exec --help states:

--node <NODE> Node.js version to use (e.g., "20.18.0", "lts", "^20.0.0"). If omitted and command is node/npm/npx or a global package binary, version is resolved automatically (same as shim behavior)

The shim resolves to the system Node, so env exec is not resolving "the same as shim behavior".

Reproduction

Deterministic container, Docker or Podman:

https://gist.github.com/Kat404/0c2bf9a8f0a6942f216a827098e3a24d

podman build -t vp-sysfirst-exec .
podman run --rm vp-sysfirst-exec
CASE A: DIVERGENCE CONFIRMED  shim=v20.19.2  vp-node=v24.22.0
CASE B: 201708991 bytes on disk under js_runtime/node
CASE C: inventory tracks it as: * v24.22.0 current
CASE D: inventory does record it, so uninstall (not clean) is the only removal
CASE E: vp env clean -> ✓ Removed 0 Node.js runtimes

The build fails if the divergence does not reproduce.

Manually, without a container:

vp env off node
vp env off pm
mkdir -p /tmp/repro && cd /tmp/repro
printf '{\n  "name": "repro",\n  "version": "1.0.0",\n  "private": true\n}\n' > package.json
node -v                 # system version
vp env which node       # /usr/bin/node
vp node -v              # vite-plus managed version

Consequences

  1. Unwanted download. Running vp node (or vp env exec node) materialises a managed runtime of roughly 190-220 MB on a machine configured to use the system Node.

  2. vp env clean cannot reclaim it. Once downloaded, the runtime is recorded as the current version:

$ vp env list
Node.js
  * v24.22.0 current

$ vp env clean
✓ Removed 0 Node.js runtimes

Per the docs, vp env clean preserves the current and configured-default versions. So the space comes back every time a project invokes vp node, and the only removal is the explicit vp env uninstall 24.22.0.

  1. Confusing state. vp env list reports * v24.22.0 current while vp env current reports the system 26.11.1 as the resolved environment. Two commands, two different "current" Node runtimes.

Possible fixes

  • Resolve env exec through the same path the shims use, so nodeShimMode: system_first applies to it too.
  • Or: when a runtime is materialised only as an env exec fallback while the environment is system-first, do not record it as the current install, so vp env clean can remove it.

Related, not duplicates

  • #2642 - Concurrent vp run dev processes download the same Node.js runtime twice. Same subsystem, different symptom.
  • #2728 - node shim loops forever in system-first mode when the system node is a mise shim. Same mode, different failure.
  • #2746 / #2758 - Separate system-first shims from the main bin directory (merged; this is why bin/ now holds only vp, vpr, vpx and the rest live in fallback-bin/, appended to PATH).

Environment

  • vite-plus v1.3.0 (vp upgrade --check reports already up to date)
  • Arch Linux, kernel 6.x
  • System Node.js: v26.11.1 at /usr/bin/node (pacman nodejs)
  • Container repro: debian:stable-slim with Debian nodejs v20.19.2 at /usr/bin/node, vite-plus installed via curl -fsSL https://vite.plus | bash
  • Podman 6.1.4
主要语言
Rust
星标
6.3k
派生
283
平均合并
1 天 11 小时
30 天内合并 PR
200

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

voidzero-dev/vite-plus 的其他 Issue

查看 voidzero-dev/vite-plus 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。