nvm ls-remote命令导致"N/A"

eCo*_*Evo 44 node.js nvm

我正在尝试使用nvm安装Node,但是当我输入任何版本时它都不可用.当我输入时,nvm ls-remote我只是得到"N/A".

我能够访问互联网,所以我无法想象会发生什么.

Jef*_*nez 83

更新LJHarb的评论,他维护着nvm.sh

LJHarb建议造成这种情况的典型问题是"系统中安装的SSL证书颁发机构已经过时".检查这个并尝试解决这个问题将是更好的第一步.

在你相信的情况在nvm.sh端的问题,LJHarb要求用户提交一个错误nvm.sh的问题跟踪器.

请随意在评论部分查看原始文本.

此外,我想指出,如果您真的处于绑定状态,以下解决方案仅作为临时使用的解决方法.建议不要永久修改导出的镜像或nvm.sh脚本.

编辑:发现更容易修复

您可以导出它用于获取内容的镜像的非https版本:

export NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist
Run Code Online (Sandbox Code Playgroud)

然后nvm工作

预编辑

刚才有同样的问题.

默认情况下,它会尝试使用卷曲,如果它在您的系统上可用.

我假设你也在Linux上,所以试试看curl $NVM_NODEJS_ORG_MIRROR看你是否得到了同样的错误:

curl: (77) error setting certificate verify locations:
  CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
Run Code Online (Sandbox Code Playgroud)

也许某些证书已经过期或者配置错误(或某人做了一些令人讨厌的事情),直到它被修复,如果你不介意解决安全问题,你可以找到nvm.sh文件(~/.nvm/nvm.sh如果你按照安装信息应该是),你可以-k在卷曲后添加一个在线17,所以它看起来像这样:

-- nvm.sh --
nvm_download() {
16  if nvm_has "curl"; then
17    curl -k $*
18  elif nvm_has "wget"; then
19    # Emulate curl with wget
...
}
Run Code Online (Sandbox Code Playgroud)

不要忘记重新启动shell,然后尝试nvm ls-remote.假设修复工作正常,您应该能够立即使用nvm.

  • 我是http://nvm.sh维护者.请不要直接编辑nvm.sh.如果您有SSL问题,*修复您的SSL问题*. (4认同)
  • 我没有卷曲错误.相反,我得到了'301永久移动'的HTML错误文档.当我回应那个字符串时,我得到了`https:// nodejs.org/dist`这是我能说的绝对正确的. (3认同)
  • 通常是您系统中安装的 SSL 证书颁发机构已过时。在这种特定情况下,nodejs.org 和 iojs.org 上的 SSL 证书配置被临时更改 - 即,它不受用户控制,并且在没有用户干预的情况下被修复。一般来说,在这些情况下,请在 http://nvm.sh 上提交问题,而不是发布随机的 Stack Overflow 问题,并且您将获得快速响应,其中包含比您在此处获得的上下文要多得多的上下文。 (2认同)

Ger*_*ger 15

最有可能的原因是curl无法使用https urls的证书(验证curl $NVM_NODEJS_ORG_MIRROR).而不是使用http url作为解决方法,IMO更好地修复curl.

假设你已经有ca-certificates安装包,下面一行添加到您的.bashrc(源1,源2):

export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.我最初做了第一个,问题又回来了. (2认同)

Nav*_*ame 15

更改自

export NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist/

export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist/

为我工作:)


hol*_*vaj 8

似乎url末尾缺少'/',这就是301永久移动消息的原因.所以改变nvm.sh中的链接

http://nodejs.org/dist

http://nodejs.org/dist/

使它工作.


haw*_*eye 8

创建一个名为

~/.curlrc

在其中插入一行

-k
Run Code Online (Sandbox Code Playgroud)

然后再试一次。

  • 你应该添加这个选项的含义 (4认同)
  • `echo "-k" > ~/.curlrc` (3认同)
  • 就像魔术一样! (2认同)
  • 来自“man curl”:-k, --insecure (TLS) 默认情况下,curl 建立的每个 SSL 连接都经过验证是安全的。即使对于其他被认为不安全的服务器连接,此选项也允许curl 继续进行和操作。通过确保服务器的证书包含正确的名称并使用证书存储成功验证来验证服务器连接。有关更多详细信息,请参阅此在线资源:https://curl.haxx.se/docs/sslcerts.html (2认同)

Chr*_* L8 7

对于像我这样在搜索后登陆这里的其他人:

我今天在 Ubuntu 上遇到了同样的问题,但原因是该/etc/ssl/certs/ca-certificates.crt文件完全为空。

解决方案是运行:

sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)

  • 我添加了“--fresh”选项(根据另一个网站的推荐)。然后“nvm ls-remote”对我有用。 (2认同)

Cla*_*Luz 6

如果您在代理后面使用 nvm,则需要将代理配置设置为 curl

编辑或创建文件~/.curlrc并在您的代理中添加这一行

echo 'proxy=http://<proxy-user>:<proxy-pass>@<proxy-url>:<proxy-port>' >> ~/.curlrc
Run Code Online (Sandbox Code Playgroud)

如果您的代理不需要用户和密码,您可以使用它:

echo 'proxy=http:<proxy-url>:<proxy-port>' >> ~/.curlrc
Run Code Online (Sandbox Code Playgroud)