我正在尝试所有可能的方法来创建一个React应用程序。我尝试过Maven,现在我正在尝试从Facebook孵化器创建-反应-应用程序。

当我尝试在npm环境中运行create-react-app my-app命令时,它在我的个人系统上运行没有问题。但是,当我在我的工作环境中尝试相同的命令时,我在命令行上遇到了以下错误:

npm ERR! node v6.10.2
npm ERR! npm  v3.10.10
npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

npm ERR! unable to get local issuer certificate
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

从互联网搜索的一个快速解决方案是npm config set strict-ssl false,幸运的是它工作了。但是作为我工作环境的一部分,我被限制将strict-ssl标志设置为false。

后来我找到了一个安全有效的解决方案,

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

这工作得很完美,我得到了一个成功的消息快乐黑客!通过不将strict-ssl标志设置为false。


将NPM回购URL更改为HTTP是一种权宜之计,但我想使用HTTPS。

在我的案例中,我的雇主(ZScaler)的代理导致了问题(因为它充当了MITM,导致了认证验证问题)

我忘记了我找到了一个脚本来帮助这一点和Git(通过HTTPS克隆GitHub回购有同样的问题),并把它分叉给我使用

基本上,它为git执行以下操作:

git config --global http.proxy http://gateway.zscaler.net:80/
git config --system http.proxy http://gateway.zscaler.net:80/

对于Node,它将proxy=http://gateway.zscaler.net:80/添加到c:\Users\$USERNAME\npm\.npmrc的末尾

这为我解决了问题。


可能发生的情况是,您的公司解密某些流量,并使用他们的证书重新加密它(您可能已经在您的密钥链或受信任的根证书中拥有该证书)

如果你使用node 7或更高版本,我发现这个修复与node和node-gyp兼容(对于Windows你需要做的不同,但你基本上只需要添加这个环境变量):

出口NODE_EXTRA_CA_CERTS = " absolute_path_to_your_certificates。pem”(在Windows中,您可能需要删除引号)

pem文件可以包含多个证书:https://nodejs.org/api/cli.html#node_extra_ca_certsfile

确保您的证书是正确的pem格式(您需要真正的换行符,而不是文字\n)

我似乎不能让它与相对路径(。或者~)

这个修复基本上告诉npm和node-gyp对常规ca使用检查,但也允许这个证书遇到它

理想情况下,您可以使用系统的受信任证书,但不幸的是,情况并非如此。


同样的错误。看起来它与SSL证书有关。如果您正在对公共包使用NPM(不需要HTTPS的安全性),您可以使用以下命令关闭严格的SSL密钥验证。

如果您只是希望一次性安装几个公开可用的软件包,这可能是最简单的解决方案。

npm config set strict-ssl=false

当我试图更新npm时,我遇到了这个错误,但在AWS Linux中从yum安装了一个非常旧的版本(1.3.6 !)我可以手动安装一个更新的npm版本,一切都得到了补救。


在尝试了所有我能找到的解决方案后:

关闭严格ssl: npm config set strict-ssl=false 将注册表更改为http而不是https: npm config设置注册表http://registry.npmjs.org/ 修改我的cafile设置:npm config set cafile /path/to/your/cert.pem 停止拒绝未知ca: set NODE_TLS_REJECT_UNAUTHORIZED=0

现在对我来说,似乎最有效的解决方案是使用NODE_EXTRA_CA_CERTS环境变量,它扩展了现有的ca,而不是用.npmrc文件中的cafile选项替换它们。你可以在你的终端中输入这个:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

当然,每次设置这个变量都很烦人,所以我把它添加到bash配置文件中,这样每次打开终端时都会设置它。如果您还没有~/。Bash_profile文件,创建一个。然后在文件末尾添加export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem。然后,删除你的.npmrc中的cafile设置。


在我的例子中,在某些时候,我将全局配置设置为使用用于项目的证书。

NPM配置列表

/path/to/global/.npmrc
NODE_EXTRA_CA_CERTS = "./certs/chain.pem"

我打开文件,删除行和npm安装再次工作。


对我来说,问题是VPN,我断开了VPN和“npm I”命令工作,没有失败。


NPM配置设置注册表http://registry.npmjs.org/

如果这个代码技巧对你不起作用,那么试着从主目录运行你的应用程序。这对我很管用。


你的操作系统是什么?在Ubuntu上,我可以通过运行来修复这个错误

npm config set cafile /etc/ssl/certs/ca-certificates.crt

告诉NPM使用我系统的证书存储。Debian使用相同的系统证书路径,我不太熟悉其他发行版和操作系统。

(我不喜欢其他所有关闭证书验证和允许中间人攻击的答案。)


这个问题很容易解决。

错误

npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY 
npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm ERR! request to https://registry.npmjs.org/yarn failed, reason: unable to get local issuer certificate  
npm ERR! A complete log of this run can be found in:

解决方案

如果您在组织或内部网中,请使用以下推荐。

NPM配置注册表 https://type_your_org_repo_fqdn

其他明智的

NPM配置设置注册表http://registry.npmjs.org/


一些原理图在引擎盖下使用纱线,并抛出相同的错误。

Yarn配置设置注册表http://registry.npmjs.org


Zscalar更新策略帮助我做网络调用,经过尝试前后提到的几个工作。

在Zscalar更新之前尝试的解决方案:

NPM配置strict-ssl为false NPM配置设置注册表http://registry.npmjs.org/ 设置NODE_TLS_REJECT_UNAUTHORIZED = 0

Zscalar应用程序中的更新策略(黄色突出显示)帮助我解决了“无法获得本地发行者证书”的问题。


这对我来说是有效的(在Mac 10.15.7上)。

我的问题是我尝试了这个命令…

npm install eslint --save-dev

…然后得到这个错误信息…

npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY
npm ERR! request to https://registry.npmjs.org/eslint failed, reason: unable to get local issuer certificate

…我在谷歌上搜索了其中一条错误消息,最终出现了您现在正在阅读的堆栈溢出问题。

然后我尝试了上面的建议之一,即。

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

...然后,我又试了一次……

npm install eslint --save-dev

...并得到相同的错误信息。

然后我做了一些独特的事情。我连接了公司的vpn。(这与某些人(即@mask)的建议相反。他们说他们关闭了vpn!)

我试着…

npm install eslint --save-dev

...第三次了,效果很好。问题解决了。(-):

(旁白:我想知道我第一次尝试解决这个问题,也就是。

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

...是必要的吗?)


按照下面的步骤,我解决了这个问题。

npm config set strict-ssl=false
npm config set registry http://registry.npmjs.org/
npm config set cafile /path/to/your/cert.pem
set NODE_TLS_REJECT_UNAUTHORIZED=0

我从C:\Users\MyUser中删除了.npmrc文件,它工作了


在终端中设置NODE_EXTRA_CA_CERTS在终端中由于某种原因对我不起作用,就像如何导出http_proxy=proxyurl在终端中不起作用一样,相反,我需要做一个npm配置设置代理yourproxyurl:port和npm配置设置http-proxy yourproxyurl:port(你可以验证现有的代理,如果有的话,通过npm get proxy)。

我必须提供——cafile参数让它显式工作,就像这样:

sudo npm install -g cordova——cafile /System/Volumes/Data/opt/homebrew/etc/ca-certificates/cert.pem