解决Win系统安装OpenClaw插件报“spawn npm ENOENT”问题

氢云
2026-02-09
点 赞
0
热 度
0
评 论
0
  1. 首页
  2. 解决Win系统安装OpenClaw插件报“spawn npm ENOENT”问题

前言

在很久很久以前,我在Windows上部署OpenClaw后,再用openclaw plugin命令安装插件的时候总是遇到“spawn npm ENOENT”错误,当时我的忍气吞声,如今我放假归来终于可以解决了

这里就不长篇大论说原因了,直接放解决办法

解决

  1. 进入nodejs目录,删了npm.ps1、npm、npx.ps1、npx这四个无用文件

  2. 打开PowerShell执行$env:PATHEXT看看有没有输出,没有输出的话就去系统变量里添加

# 变量名
PATHEXT
# 变量值
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  1. 重新打开PowerShell重复步骤2,看看有没有输出,如果还没输出,则执行下方的

$env:PATHEXT = ".COM;.EXE;.BAT;.CMD;.VBS;.JS;.WSF;.MSC"
  1. 执行一下Get-Command npm看看是不是npm.cmd,是的话进行下一步

  2. nodejs文件夹下有个node_modules文件夹存放着全局的一些依赖,进入文件夹:nodejs\node_modules\openclaw\dist\process 找到exec.js 文件,大约在62行,你能看到如下内容

将框中的代码替换为下边的

let child;
const cmd = argv[0];
const args = argv.slice(1);

if (process.platform === 'win32') {
    let finalCmd, finalArgs;

    // 映射 npm → npm.cmd, npx → npx.cmd
    if (cmd === 'npm') {
        finalCmd = 'cmd';
        finalArgs = ['/c', 'npm.cmd', ...args];
    } else if (cmd === 'npx') {
        finalCmd = 'cmd';
        finalArgs = ['/c', 'npx.cmd', ...args];
    } else if (cmd.endsWith('.cmd') || cmd.endsWith('.bat')) {
        finalCmd = 'cmd';
        finalArgs = ['/c', cmd, ...args];
    } else {
        // 普通命令(如 node, git)
        finalCmd = cmd;
        finalArgs = args;
    }

    child = spawn(finalCmd, finalArgs, {
        stdio,
        cwd,
        env: resolvedEnv,
        windowsVerbatimArguments,
    });
} else {
    // 非 Windows 平台
    child = spawn(cmd, args, {
        stdio,
        cwd,
        env: resolvedEnv,
        windowsVerbatimArguments,
    });
}

然后保存,修复完成


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

氢云

站长

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性

每一步踏实的沉淀,都是未来绽放的伏笔

32 文章数
4 分类数
7 评论数
73标签数