当我尝试安装纱线时,我得到以下输出:
Internal Error: Error when performing the request
at ClientRequest.<anonymous> (C:\Program Files\nodejs\node_modules\corepack\dist\corepack.js:3937:20)
at ClientRequest.emit (node:events:390:28)
at TLSSocket.socketErrorListener (node:_http_client:447:9)
at TLSSocket.emit (node:events:390:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
Run Code Online (Sandbox Code Playgroud)
长话短说
根本原因分析
我在“corepack.js:3937:20”处遇到了“内部错误:执行请求时出错”,就像这里的每个人一样,所以我查看了第 3937 行,发现这是一个普通的 https.get 调用。我对 corepack.js 进行了一些额外的调试,以查看正在访问的内容,并发现它无法尝试访问“https://registry.npmjs.com/pnpm”。
我在网络浏览器中导航到“https://registry.npmjs.com/pnpm”,发现我的公司环境让它加载没有错误。所以我启动了 Node JS 并发出命令看看会发生什么:
https.get("https://registry.npmjs.com/pnpm", {}, res => console.log(res));
Run Code Online (Sandbox Code Playgroud)
我收到“无法获取本地颁发者证书”错误。在我的公司环境中,有一个安全解决方案,可以将其自己的自签名证书注入到任何出站 https 请求的响应中。这对我来说意味着我需要指示任何发出 https 请求的内容(例如 Node.js 和curl)使用自定义 CA 证书文件。
为了让 corepack 工作,我首先将自定义 CA 证书文件硬编码到 corepack.js 中,虽然它非常丑陋,但它确实有效。进一步挖掘后,我发现了 Node.js 使用的 NODE_EXTRA_CA_CERTS 环境变量选项,因此还在管理员权限的 cmd 会话中成功尝试了以下操作(还删除了我之前所做的 corepack.js hack):
set NODE_EXTRA_CA_CERTS=c:\temp\combo.ca.cer
corepack enable
yarn set version stable
Run Code Online (Sandbox Code Playgroud)
combo.ca.cer 是通过导航到https://registry.npmjs.com/pnpm并将所有 CA 证书(根证书和任何中间 CA 证书)导出到文本文件并复制粘贴所有 CA 证书的内容来构建的文件合并到一个名为combo.ca.cer 的文本文件中。我使用/sf/answers/3130833261/的建议来创建自定义 CA 证书文件。
作为工作计算机初始设置的一部分,我遇到了同样的错误。即使干净地运行纱线(yarn init -2
在空文件夹中)也会导致错误。
关闭我的 VPN 使纱线按预期工作。
谷歌搜索错误引导我到这个页面,这让我怀疑 VPN。https://github.com/nodejs/corepack/issues/67
归档时间: |
|
查看次数: |
15948 次 |
最近记录: |