我正在尝试使用 nvm 安装 Node,但是当我键入任何版本时,它都不可用。当我输入时,nvm ls-remote
我只会得到“N/A”。
我能够访问互联网,所以我不知道会发生什么。
更新来自维护 nvm.sh 的 LJHarb 的评论
LJHarb 建议导致此问题的典型问题是“安装在系统中的 SSL 证书颁发机构已过期”。检查并尝试解决此问题将是更好的第一步。
如果您认为 nvm.sh 方面存在问题,LJHarb 会要求用户在nvm.sh 的问题跟踪器上提交错误。
欢迎在评论部分查看原文。
另外,我想指出,以下解决方案旨在作为解决方法,仅在您确实处于绑定状态时临时使用。不建议永久修改导出的镜像或 nvm.sh 脚本本身。
编辑:发现更容易修复
您可以导出它用来抓取内容的镜像的非 https 版本:
export NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist
然后 nvm 工作
预编辑
刚才遇到了同样的问题。
看起来默认情况下它会尝试使用 curl 如果它在您的系统上可用。
我假设您也在 linux 上,因此请尝试运行curl $NVM_NODEJS_ORG_MIRROR
并查看是否遇到与我相同的错误:
curl: (77) error setting certificate verify locations:
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
也许某些证书已过期或配置错误(或有人在做一些令人讨厌的事情),直到它被修复,如果您不介意绕过安全问题,您可以找到 nvm.sh 文件(~/.nvm/nvm.sh
如果您按照安装信息应该在),你可以-k
在 curl 之后的第 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
...
}
不要忘记重新启动你的 shell,然后尝试nvm ls-remote
. 假设修复有效,您现在应该可以使用 nvm。
这很可能是由于 curl 无法为 https url 使用证书(使用 验证curl $NVM_NODEJS_ORG_MIRROR
)引起的。与其使用 http url 作为解决方法,不如通过将 curl 指向适当的 CA 包(source1、source2)来修复 curl 。将以下行添加到您的.bashrc
:
Ubuntu(假设您已ca-certificates
安装软件包)
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
RHEL 7
export CURL_CA_BUNDLE=/etc/pki/tls/certs/ca-bundle.crt
创建一个名为
~/.curlrc
在其中插入一行
-k
然后再试一次。
似乎 url 末尾缺少“/”,这就是 301 永久移动消息的原因。所以将 nvm.sh 中的链接从
至
让它工作。
如果您在代理后面使用 nvm,则需要将代理配置设置为 curl
编辑或创建文件~/.curlrc并将这一行添加到您的代理中
echo 'proxy=http://<proxy-user>:<proxy-pass>@<proxy-url>:<proxy-port>' >> ~/.curlrc
如果您的代理不需要用户名和密码,您可以使用它:
echo 'proxy=http:<proxy-url>:<proxy-port>' >> ~/.curlrc
对于像我这样在搜索后登陆这里的其他人:
我今天在 Ubuntu 上遇到了同样的问题,但原因是/etc/ssl/certs/ca-certificates.crt
文件完全为空。
解决方案是运行:
sudo update-ca-certificates
从改变
export NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist/
至
export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist/
为我工作:)
我遇到了同样的问题,但其他解决方案都没有帮助。curl -v $NVM_NODEJS_ORG_MIRROR/
显示 TLS 1.2 并且证书没有问题。当我尝试which curl
时,事实证明我的 PATH 中有一个 anaconda3/bin 目录,它有自己的 curl 版本(不知道他们为什么需要它)。一旦我确定了我的路径,nvm ls-remote
就可以正常工作。希望这有助于节省其他人的一些挫败感。
我的情况可能很少见,但只想向该线程添加另一个数据点:
由于我的本地设置问题,我不想安装curl
,我明确设置了一个别名,curl
以警告自己以后不要安装它,这导致nvm
我相信我有 curl 可用并用于curl
下载。在我删除我的别名后它起作用了。
解决方案
明确检查您的curl
orwget
是否可用。
我最近有这个问题。更改为http://nodejs.org/dist/
对我不起作用,因为它重定向到 https 并导致 NA 从nvm ls-remote
. 所以我所做的是:
sudo update-ca-certificates
然后我编辑~/.nvm/nvm.sh
并更改
http://nodejs.org/dist
到https://nodejs.org/dist/
(添加 https 和“/”以避免重定向)并且它有效
对我来说,这将工作
nvm alias default node
在最新安装的 Node 版本(8.11.1)处指向“默认”。
在 Windows 7 上的 Virtual Box 4.3.30 下使用 Vagrant 1.7.1 运行 Ubuntu 14.04 盒子时,我遇到了这个问题。我尝试了上面的建议,但没有任何效果。我在这里发现这篇文章与我在尝试运行时遇到的 Curl 错误有关:curl $NVM_NODEJS_ORG_MIRROR
错误是:curl: (7) Couldn't connect to server
我能够按照该帖子上的建议,然后一旦我重新启动我的 Vagrant 框,vagrant reload
我就能够运行nvm ls-remote
并查看节点版本列表并安装。这是我在 vagrant box 上所做的:cd /etc/
sudo nano hosts
更改 127.0.0.1 本地主机
至:
0.0.0.0 本地主机
希望这可以帮助任何有同样问题的人。谢谢@Truong Nguyen
它在我的 linux 中对我有用:
导出 NVM_NODEJS_ORG_MIRROR= http://nodejs.org/dist
在 Ubuntu 服务器上,默认情况下不使用 DHCP 设置接口。我忘记了这一点,安装 nvm 后,我重新启动了网络连接,但没有意识到这一点。我知道您有网络连接,但我将其发布为供后代检查的内容。很容易被遗忘/错过的愚蠢简单的事情。