目录
[1.输入npm login直接给你跳转到Sign in to CNPM](#1.输入npm login直接给你跳转到Sign in to CNPM)
[2.npm ERR! code E426](#2.npm ERR! code E426)
[3. npm ERR! code ETIMEDOUT](#3. npm ERR! code ETIMEDOUT)
[4.npm ERR! code ECONNREFUSED](#4.npm ERR! code ECONNREFUSED)
前言背景:
近日,我执行npm publish突然报错,主要是报code ETIMEDOUT,连接异常。
bash
npm notice
npm ERR! code ETIMEDOUT
npm ERR! errno ETIMEDOUT
npm ERR! network request to https://registry.npmjs.org/xx failed, reason: connect ETIMEDOUT 104.16.1.35:443
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly. See: 'npm help config'
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\16597\AppData\Roaming\npm-cache\_logs\2023-12-15T02_06_32_447Z-debug.log
采坑之路:
1.修改https为http,问题还在
然后受这篇文章《npm无法登录、发布_reason: connect etimedout 104.16.26.34:443 npm err-CSDN博客》误导,
重新把https://xxxx改为http://xxx,问题还在!
bash
# 设置镜像源为官方去https为http地址
npm config set registry http://registry.npmjs.org/
2.修改为淘宝镜像,问题还在
然后我受这篇文章《npm 发布更新包失败问题_npm publish 后未刷新-CSDN博客》误导,把registry设置为了淘宝镜像,我还以为登录过期了,我就用npm login重新登录,结果登录不了。
Sign up to CNPM
Public registration is not allowed
bash
# 设置registry为淘宝镜像源
npm config set registry https://registry.npmmirror.com/
注意:淘宝镜像更改重定向地址:原来用http://registry.npm.taobao.org/npm,所以现在直接用了https://registry.npmmirror.com/。
3.修改为官网地址,问题还在
然后我又受《npm login问题汇总-CSDN博客》这篇大哥误导,他还强调,要改回去不带https的地址,然后我又试一下登录npm login
命令:
npm config set registry http://registry.npmjs.org/
注意不是下面的https地址,是http地址。(注意不是
npm config set registry https://registry.npmjs.org/
)
顺便说一下,退出上一个npm login,我用的Ctrl+Z。
bash
# 查看registry配置
npm config get registry
# 设置registry配置
npm config set registry http://registry.npmjs.org/
结果大家也看到了,出现新的错误,CODE E426。
bash
$ npm login
Username: zhou***han
Password: *******
Email: (this IS public) 165***767@qq.com
npm ERR! code E426
npm ERR! Registry returned 426 for PUT on http://registry.npmjs.org/-/user/org.couchdb.user:
4.升级node和npm,问题还在
出现新的code码,心想那就好解决了呀,参照了《npm publish遇到 code E426_npm publish 426-CSDN博客》《npm publish发布426与403问题_npm包发布失败 upgrade required - put-CSDN博客》《npm publish报错error 426 Upgrade Required - PUT http://registry.npmjs.org/your-packageName_npm err! code e426-CSDN博客》三篇文章,总的来说就是npm让我升级,node让我升级14.18.0 LTS。
然后查看了一下我的npm版本是6.4.1,还好我有装nvm,切换一个node版本不就升级。试试吧。
bash
# nvm查看node版本
nvm list
# nvm使用一个高版本
nvm use 18.16.0
# 查看当前node版本
node -v
# 查看当前npm版本
npm -v
结果:
bash
npm notice Log in on http://registry.npmjs.org/
npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
npm ERR! code E426
npm ERR! 426 Upgrade Required - PUT http://registry.npmjs.org/-/user/org.couchdb.user:zhouzhenhan
npm ERR! A complete log of this run can be found in:
npm ERR!
反而复现了别人文章里的问题426 Upgrade Required,我出现的问题 Registry returned 426,然后我按照文章《npm publish 时提示需要升级TLS 1.2的解决方案_including for package installation - must use tls -CSDN博客》里的操作,一顿安装TLS也没解决我的问题。然后就想打开那个通知《 The npm registry is deprecating TLS 1.0 and TLS 1.1》看看描述。
bash
npm install -g https://tls-test.npmjs.com/tls-test-1.0.0.tgz
看到最后一行,要升级npm大于7,要奔溃了啊。此时我的node 18.16.0,我的npm版本9.5.1.也按要求下载了TLS,还是报错。
If you see a TLS error message instead, we encourage you to upgrade to a currently supported version of Node.js and the latest version of npm v7.
翻译:
如果你看到一个TLS错误消息,我们建议你升级到当前支持的Node.js版本和最新版本的npm v7。
5.猜想网络问题,问题解决
冷静冷静,回归最开始我出现的问题,我是连接超时,连不上官网,登录不了,发布不了。然后看了这篇《npm publish 发布失败 无法连接 https://registry.npmjs.org》和我现象描述一致,我也是手机可以出现,电脑端访问不行。我也共享了手机热点,太慢了,还是无法登陆,无法发布。
如图,手机访问有数据返回:
电脑端访问就无法连接了:
看来只能借个梯子,设置一下proxy的端口号。
bash
# 设置代理端口
npm config set proxy http://127.0.0.1:8001
查看梯子的端口号是8001,你可以具体改成你的自己的代理:
由于镜像地址这个时候不是https的报错变成了code ECONNREFUSED。
所以设置回https的官网地址:
bash
# 设置为加https的
npm config set registry https://registry.npmjs.org/
终于可以登录成功拉,可以发布了!~
采坑总结:
虽然本次采坑走了很多弯路,但也学会了一些技能,比如如下错误的处理:
1.输入npm login直接给你跳转到Sign in to CNPM
这个时候改镜像地址为官网才能正常登陆发布;
bash
# 设置官网https的镜像
npm config set registry https://registry.npmjs.org/
2.npm ERR! code E426
应该是接口请求失败,需要看一下是因为网络问题,还是参数问题请求不了?
npm ERR! code E426
npm ERR! Registry returned 426 for PUT
npm ERR! code E426npm ERR! 426 Upgrade Required - PUT
我出现以上2个报错,都是通过代理连接上官网镜像就解决了。
bash
# 设置代理端口
npm config set proxy http://127.0.0.1:8001
3. npm ERR! code ETIMEDOUT
这个报错是连接错误 This is a problem related to network connectivity.连接超时,我也是通过代理解决。猜测有防火墙或者限制访问了,毕竟手机可以打开,电脑打不开。
npm ERR! code ETIMEDOUT
npm ERR! errno ETIMEDOUT
npm ERR! syscall connect
npm ERR! network connect ETIMEDOUT 104.16.29.34:443
4.npm ERR! code ECONNREFUSED
这个问题报错应该是端口设置了,但是连接不了。我把梯子打开就可以了。
npm login
npm ERR! code ECONNREFUSED
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to https://registry.npmjs.org/-/v1/login failed, reason: connect ECONNREFUSED 127.0.0.1:8001
最后
如果说
友友们之间的点赞
展现的是相互之间的支持,善意和友情
那么
你对我文章的认真阅读
则是对我的劳动成果的
默默地承认和支持
每一次创文的过程
都是我锻炼自己逻辑思维能力和语言组织能力的过程
也是我
不断深悟生活,思考人生的过程
每一篇文章的形成
都是我心血的结晶
感谢您的阅读