轶哥

📚 Having fun with AI Agent. Always learning.

    解决pnpm (ERR_INVALID_THIS)异常 Node.js 20

    在Node.js 20版本中,你可能会遇到如下异常:

     WARN  GET https://registry.npmjs.org/chatgpt/-/chatgpt-5.0.10.tgz error (ERR_INVALID_THIS). Will retry in 10 seconds. 2 retries left.
    

    为了解决这个问题,你只需要升级到pnpm v8.3.1或更高版本。可以通过以下命令安装并激活指定版本的pnpm:

    corepack prepare pnpm@8.3.1 --activate
    

    问题原因及修复

    这个问题的根本原因在于pnpm模块依赖的node-fetch库中,URLSearchParams.prototype[p].call()函数调用时,错误地把this上下文设置为了receiver(代理对象)而非target(原始对象)。将this上下文设置为receiver导致URLSearchParams的方法无法正确访问原始对象的属性和方法,进而抛出ERR_INVALID_THIS异常。

    修复此问题的代码位于https://github.com/pnpm/node-fetch/blob/ebe57b3986135258dbac010b754fc54de4beb2a8/src/headers.js,具体更改如下:

    return URLSearchParams.prototype[p].call(
        target,
        String(name).toLowerCase(),
        String(value)
    );
    

    通过将this上下文正确地设置为target(原始对象),URLSearchParams的方法可以正确访问原始对象的属性和方法,从而解决了ERR_INVALID_THIS异常。

    总结

    如果你在使用Node.js 20时遇到了pnpm的ERR_INVALID_THIS异常,请升级到pnpm v8.3.1或更高版本。这个问题已经在新版pnpm中得到修复,升级后就能解决该问题。

    注意: Node.js 20.0.0版本存在异常断流问题,请升级到Node.js 20.1.0版本。

    打赏
    交流区

    暂无内容

    尚未登陆
    发布
      上一篇 (强行修改笔记本风扇转速的方法)
    下一篇 (解决VSCode Ctrl + . 快捷键被占用)  

    评论回复提醒