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

Vite+ CLI cannot start in StackBlitz because its WASI binding is unavailable

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

维护者通常 1 天内回复

@wan9chi 已经在做这个了。

开始于 2026年9月17日。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
node.js, rust, wasm

调研方向

从 issue 中提到的 WASI fallback 和 loader 路径处的 packages/cli/binding/index.cjs 开始。使用 StackBlitz 项目复现,或运行 NAPI_RS_FORCE_WASI=error ./node_modules/.bin/vp --version,以确认两个 WASI 选项都不可用。当分发了兼容的 WASI binding,并且 vp --version 和 vp env current 在 WebContainer 中正常工作时,即视为完成。

由索引模型根据 Issue 内容生成。

描述

pending triage to be discussed
Describe the bug

The Vite+ CLI cannot start in a StackBlitz WebContainer.

A minimal project containing only [email protected] fails when it runs vp --version or vp env current. Both commands exit while loading vite-plus/binding/index.cjs, before Vite+ processes the command.

The platform-specific native binding cannot load in the WebContainer. The generated loader then checks for these WASI bindings:

  • ./vite-plus.wasi.cjs
  • @voidzero-dev/vite-plus-wasm32-wasi

Neither option is available:

  • The published [email protected] package contains no local WASI loader or .wasm artifact.
  • The npm registry returns 404 for @voidzero-dev/vite-plus-wasm32-wasi.

Expected: Vite+ loads a compatible WASI binding and runs vp commands in the WebContainer.

Actual: Vite+ exits with Cannot find native binding.

The missing WASI distribution can also be reproduced deterministically on macOS:

NAPI_RS_FORCE_WASI=error ./node_modules/.bin/vp --version

That command reports both missing WASI options:

Error: WASI binding not found and NAPI_RS_FORCE_WASI is set to error

Cause 1:
Error: Cannot find module '@voidzero-dev/vite-plus-wasm32-wasi'

Cause 2:
Error: Cannot find module './vite-plus.wasi.cjs'

Normal macOS execution succeeds with the native binding. The forced command isolates the unavailable WASI distribution; it does not indicate a problem with the macOS native binding.

Source references

The current generated loader documents WASI as its fallback:

https://github.com/voidzero-dev/vite-plus/blob/d3bc20a531fc909b0389e09b006b6e8e99944fc2/packages/cli/binding/index.cjs#L733-L742

It first tries the bundled ./vite-plus.wasi.cjs loader and its .wasm artifacts:

https://github.com/voidzero-dev/vite-plus/blob/d3bc20a531fc909b0389e09b006b6e8e99944fc2/packages/cli/binding/index.cjs#L807-L829

It then tries @voidzero-dev/vite-plus-wasm32-wasi:

https://github.com/voidzero-dev/vite-plus/blob/d3bc20a531fc909b0389e09b006b6e8e99944fc2/packages/cli/binding/index.cjs#L830-L865

When WASI is required and neither option can load, it throws the forced-WASI error:

https://github.com/voidzero-dev/vite-plus/blob/d3bc20a531fc909b0389e09b006b6e8e99944fc2/packages/cli/binding/index.cjs#L869-L876

Related findings

This prevents projects that use Vite+ commands from running in StackBlitz WebContainers. The reproduction contains no application code and fails with vp --version alone.

I am not currently planning a PR.

Reproduction

https://stackblitz.com/~/github.com/ueberBrot/vite-plus-webcontainer-repro?file=package.json&terminal=dev

Steps to reproduce
  1. Open the StackBlitz reproduction.
  2. Wait for StackBlitz to install the dependencies.
  3. StackBlitz automatically runs pnpm run reproduce, which invokes vp --version.
  4. Observe that Vite+ exits while loading its native binding.
  5. Run pnpm run environment in the terminal.
  6. Observe that vp env current fails during the same binding-loading step.

To isolate the unavailable WASI distribution on macOS:

  1. Clone https://github.com/ueberBrot/vite-plus-webcontainer-repro.
  2. Run pnpm install.
  3. Run pnpm run reproduce:wasi.
  4. Observe that Vite+ cannot find either ./vite-plus.wasi.cjs or @voidzero-dev/vite-plus-wasm32-wasi.
System Info
StackBlitz WebContainer

$ node --version
v22.22.3

$ pnpm --version
8.15.6

$ pnpm run environment

> [email protected] environment /home/ueberBrot/vite-plus-webcontainer-repro
> vp env current

ELIFECYCLE Command failed with exit code 1.
Error: Cannot find native binding. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.
    at Object.eval (/home/ueberBrot/vite-plus-webcontainer-repro/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:882:19)
    at Module._compile (node:internal/modules/cjs/loader:160:19302)
    at Module._extensions..js (node:internal/modules/cjs/loader:160:20043)
    at Module.load (node:internal/modules/cjs/loader:160:17661)
    at Module._load (node:internal/modules/cjs/loader:160:15179)
    at wrapModuleLoad (node:internal/modules/cjs/loader:160:4199)
    at loadCJSModuleWithModuleLoad (node:internal/modules/esm/translators:174:3866)
    at _0x504db8.evaluationFunction (node:internal/modules/esm/translators:174:3603)

Node.js v22.22.3

$ pnpm run reproduce

> [email protected] reproduce /home/ueberBrot/vite-plus-webcontainer-repro
> vp --version

ELIFECYCLE Command failed with exit code 1.
Error: Cannot find native binding. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). Please try `npm i` again after removing both package-lock.json and node_modules directory.
    at Object.eval (/home/ueberBrot/vite-plus-webcontainer-repro/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:882:19)
    at Module._compile (node:internal/modules/cjs/loader:160:19302)
    at Module._extensions..js (node:internal/modules/cjs/loader:160:20043)
    at Module.load (node:internal/modules/cjs/loader:160:17661)
    at Module._load (node:internal/modules/cjs/loader:160:15179)
    at wrapModuleLoad (node:internal/modules/cjs/loader:160:4199)
    at loadCJSModuleWithModuleLoad (node:internal/modules/esm/translators:174:3866)
    at _0x504db8.evaluationFunction (node:internal/modules/esm/translators:174:3603)

Node.js v22.22.3
Used Package Manager

pnpm

Logs
Local diagnostic environment:

macOS 26.6.2
Architecture: arm64
Node.js v24.18.0
vite-plus v0.3.0

$ NAPI_RS_FORCE_WASI=error node -e 'try { require("./node_modules/vite-plus/binding/index.cjs") } catch (error) { let current = error; let index = 0; while (current) { console.error("Cause " + index + ":"); console.error(current.stack || String(current)); current = current.cause; index += 1; } process.exit(1); }'

Cause 0:
Error: WASI binding not found and NAPI_RS_FORCE_WASI is set to error
    at Object.<anonymous> (/private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:870:19)
    at Module._compile (node:internal/modules/cjs/loader:1871:14)
    at Object..js (node:internal/modules/cjs/loader:2002:10)
    at Module.load (node:internal/modules/cjs/loader:1594:32)
    at Module._load (node:internal/modules/cjs/loader:1396:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
    at Module.require (node:internal/modules/cjs/loader:1617:12)
    at require (node:internal/modules/helpers:153:16)
    at [eval]:1:7
    at runScriptInThisContext (node:internal/vm:219:10)

Cause 1:
Error: Cannot find module '@voidzero-dev/vite-plus-wasm32-wasi'
Require stack:
- /private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs
- /private/tmp/vite-plus-webcontainer-repro.9X28Wk/[eval]
    at /private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:727:19
    at Array.reduce (<anonymous>)
    at createLoadErrorChain (/private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:720:17)
    at Object.<anonymous> (/private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:875:19)
    at Module._compile (node:internal/modules/cjs/loader:1871:14)
    at Object..js (node:internal/modules/cjs/loader:2002:10)
    at Module.load (node:internal/modules/cjs/loader:1594:32)
    at Module._load (node:internal/modules/cjs/loader:1396:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
    at Module.require (node:internal/modules/cjs/loader:1617:12)

Cause 2:
Error: Cannot find module './vite-plus.wasi.cjs'
Require stack:
- /private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs
- /private/tmp/vite-plus-webcontainer-repro.9X28Wk/[eval]
    at /private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:727:19
    at Array.reduce (<anonymous>)
    at createLoadErrorChain (/private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:720:17)
    at Object.<anonymous> (/private/tmp/vite-plus-webcontainer-repro.9X28Wk/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plus/binding/index.cjs:875:19)
    at Module._compile (node:internal/modules/cjs/loader:1871:14)
    at Object..js (node:internal/modules/cjs/loader:2002:10)
    at Module.load (node:internal/modules/cjs/loader:1594:32)
    at Module._load (node:internal/modules/cjs/loader:1396:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
    at Module.require (node:internal/modules/cjs/loader:1617:12)
Validations
主要语言
Rust
星标
6k
派生
274
平均合并
1 天 11 小时
30 天内合并 PR
196

环境准备

在 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 摘要。