解决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版本。
除特别注明外,本站所有文章均为原创。原创文章均已备案且受著作权保护,未经作者书面授权,请勿转载。
打赏
交流区
暂无内容
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢