SSL 错误: 使用 npm 命令时 CERT _ UNTRUSTED

我尝试使用 npm 命令安装 Express 框架,但是出现了以下错误。

错误消息是

E:\myFindings\nodejs_programs\node>npm install -g express
npm http GET https://registry.npmjs.org/express
npm ERR! Error: SSL Error: CERT_UNTRUSTED
npm ERR!     at ClientRequest.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\request\main.js:409:26)
npm ERR!     at ClientRequest.g (events.js:185:14)
npm ERR!     at ClientRequest.EventEmitter.emit (events.js:88:17)
npm ERR!     at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1445:7)
npm ERR!     at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
npm ERR!     at CleartextStream.socketOnData [as ondata] (http.js:1356:20)
npm ERR!     at CleartextStream.CryptoStream._push (tls.js:396:27)
npm ERR!     at SecurePair.cycle (tls.js:751:20)
npm ERR!     at EncryptedStream.CryptoStream.write (tls.js:131:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!  [Error: SSL Error: CERT_UNTRUSTED]
npm ERR! You may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>


npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "express"
npm ERR! cwd E:\myFindings\nodejs_programs\node
npm ERR! node -v v0.8.0
npm ERR! npm -v 1.1.32
npm ERR! message SSL Error: CERT_UNTRUSTED
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     E:\myFindings\nodejs_programs\node\npm-debug.log
npm ERR! not ok code 0

帮我整理一下

151100 次浏览

如果你是公司代理服务器的幕后操作者,请尝试使用公司代理服务器的 npm 设置:

npm --https-proxy=http://proxy.company.com install express -g
npm ERR! node -v v0.8.0
npm ERR! npm -v 1.1.32

更新您的 node.js 安装:

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

编辑: 好的,如果你 真的有一个很好的理由运行一个古老版本的软件,npm set ca null将修复这个问题。之所以会发生这种情况,是因为内置的 npm 证书已经过期很多年了。

您可以使用以下命令绕过 https:

npm config set strict-ssl false

或设置来自 https 或 http 的注册表 URL,如下所示:

npm config set registry="http://registry.npmjs.org/"

然而,我个人认为绕过 https 并不是真正的解决方案,但是我们可以将其作为一种解决方案。

我想我知道上述错误的原因了。它是为了在客户端网络中工作而提供的公司代理(虚拟专用网络)。如果没有这个连接,我经常面临同样的问题,无论是 maven build 还是 npm install。

自从我在谷歌上偶然发现这篇文章:

尝试使用 npm ci它将远远超过一个 npm install

手册上说:

简而言之,使用 npm install 和 npm ci 之间的主要区别是:

  • 该项目必须有一个现有的包-lock. json 或 npm-crinkwrap.json。
  • 如果包锁定中的依赖项与 package.json 中的依赖项不匹配,npm ci 将退出并出现错误,而不是更新包锁定。
  • Npm ci 一次只能安装整个项目: 不能使用此命令添加单个依赖项。
  • 如果 node _ module 已经存在,那么将在 npm ci 开始安装之前自动删除它。
  • 它永远不会写入 package.json 或任何包锁: 安装基本上是冻结的。

我遇到了同样的问题,最后我明白了我的节点版本是旧的。例如,您可以通过以下步骤在 Ubuntu 中安装当前活动的 LTS 节点版本:

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install nodejs -y

更多版本和系统的安装说明可在以下连结找到:

Https://github.com/nodesource/distributions/blob/master/readme.md

重新安装节点,然后更新 npm。

首先我删除了节点

apt-get purge node

然后根据分布安装节点。

然后

npm install npm@latest -g

只有当您运行的节点/npm 版本非常老,证书已过期或已被替换时,才建议使用,

第一次运行 npm set ca null

然后做你的 npm install