我正在尝试所有可能的方法来创建一个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>
这对我来说是有效的(在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回购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的末尾
这为我解决了问题。
在尝试了所有我能找到的解决方案后:
关闭严格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设置。