Skip to content

Windows 环境下vs code插件检测误报"未检测到 npm"(spawn 未使用 shell 模式) #453

Description

@yileina862

Issue Type

Incorrect information

Document Location

extensions/vscode/src/extension/services/CliService.ts

Description

环境信息
系统:Windows 11
VS Code 版本:(填写你的版本)
插件版本:open-code-review-vscode 0.1.1
Node.js:v24.14.0(官方安装包,PATH 配置正常)

问题:
在vs code插件中的模型配置页的环境检测中,Node.js 能正常检测到(显示 v24.14.0),但 npm 一项显示"未通过:未检测到 npm"。
实际上 npm 已正常安装,在 VS Code 内置终端和系统终端中执行 npm --version 均正常输出版本号。

原因:
Windows 上 node 是 node.exe,而 npm 是 npm.cmd 批处理脚本。插件 out/extension.js 中的 probeCommand 使用 child_process.spawn 时未设置 shell: true:
// 环境检测(npm 检测失败的位置)
spawn(resolveBin(e), t, { env: getShellEnv() })
Node.js 的 spawn 在不启用 shell 时无法直接执行 .cmd 文件,会触发 error 事件(ENOENT),导致 npm 检测被误判为失败。node 因为是 .exe 所以能检测通过,这也解释了为何两者结果不一致。
值得注意的是,插件的 install 方法中已经正确处理了该问题(shell: "win32" === process.platform),但以下两处遗漏了:
probeCommand(环境检测,导致 npm / ocr CLI 均无法被识别)
runRaw(实际执行审查命令,即使跳过检测,Windows 下运行审查也会失败)

Suggested Change

将probeCommand和runRaw的 spawn 调用统一加上 shell 参数,与 install 方法保持一致:
spawn(resolveBin(e), t, {
env: getShellEnv(),
shell: process.platform === "win32"
})

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationgood first issueGood for newcomers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions