目录
前言背景:
采坑之路:
1.修改https为http,问题还在
2.修改为淘宝镜像,问题还在
3.修改为官网地址,问题还在
4.升级node和npm,问题还在
5.猜想网络问题,问题解决
采坑总结:
1.输入npm login直接给你跳转到Sign in to CNPM
2.npm ERR! code E426
3. npm ERR! code ETIMEDOUT
4.npm ERR! code ECONNREFUSED
近日,我执行npm publish突然报错,主要是报code ETIMEDOUT,连接异常。
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
然后受这篇文章《npm无法登录、发布_reason: connect etimedout 104.16.26.34:443 npm err-CSDN博客》误导,
重新把https://xxxx改为http://xxx,问题还在!
# 设置镜像源为官方去https为http地址
npm config set registry http://registry.npmjs.org/
然后我受这篇文章《npm 发布更新包失败问题_npm publish 后未刷新-CSDN博客》误导,把registry设置为了淘宝镜像,我还以为登录过期了,我就用npm login重新登录,结果登录不了。
Sign up to CNPM
Public registration is not allowed
# 设置registry为淘宝镜像源
npm config set registry https://registry.npmmirror.com/
注意:淘宝镜像更改重定向地址:原来用http://registry.npm.taobao.org/npm,所以现在直接用了https://registry.npmmirror.com/。
然后我又受《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。
# 查看registry配置
npm config get registry
# 设置registry配置
npm config set registry http://registry.npmjs.org/
结果大家也看到了,出现新的错误,CODE E426。
$ npm login
Username: zhou***han
Password: *******
Email: (this IS public) 165***[email protected]
npm ERR! code E426
npm ERR! Registry returned 426 for PUT on http://registry.npmjs.org/-/user/org.couchdb.user:
出现新的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版本不就升级。试试吧。
# nvm查看node版本
nvm list
# nvm使用一个高版本
nvm use 18.16.0
# 查看当前node版本
node -v
# 查看当前npm版本
npm -v
结果:
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:zhouzhenhannpm 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》看看描述。
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。
冷静冷静,回归最开始我出现的问题,我是连接超时,连不上官网,登录不了,发布不了。然后看了这篇《npm publish 发布失败 无法连接 https://registry.npmjs.org》和我现象描述一致,我也是手机可以出现,电脑端访问不行。我也共享了手机热点,太慢了,还是无法登陆,无法发布。
如图,手机访问有数据返回:
电脑端访问就无法连接了:
看来只能借个梯子,设置一下proxy的端口号。
# 设置代理端口
npm config set proxy http://127.0.0.1:8001
查看梯子的端口号是8001,你可以具体改成你的自己的代理:
由于镜像地址这个时候不是https的报错变成了code ECONNREFUSED。
所以设置回https的官网地址:
# 设置为加https的
npm config set registry https://registry.npmjs.org/
终于可以登录成功拉,可以发布了!~
虽然本次采坑走了很多弯路,但也学会了一些技能,比如如下错误的处理:
这个时候改镜像地址为官网才能正常登陆发布;
# 设置官网https的镜像
npm config set registry https://registry.npmjs.org/
应该是接口请求失败,需要看一下是因为网络问题,还是参数问题请求不了?
npm ERR! code E426
npm ERR! Registry returned 426 for PUT
npm ERR! code E426
npm ERR! 426 Upgrade Required - PUT
我出现以上2个报错,都是通过代理连接上官网镜像就解决了。
# 设置代理端口
npm config set proxy http://127.0.0.1:8001
这个报错是连接错误 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
这个问题报错应该是端口设置了,但是连接不了。我把梯子打开就可以了。
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
如果说
友友们之间的点赞
展现的是相互之间的支持,善意和友情
那么
你对我文章的认真阅读
则是对我的劳动成果的
默默地承认和支持
每一次创文的过程
都是我锻炼自己逻辑思维能力和语言组织能力的过程
也是我
不断深悟生活,思考人生的过程
每一篇文章的形成
都是我心血的结晶
感谢您的阅读