npm 想publish自己的包,package.json已配置好,需要先 login,然后才能publish,可如果用 官方的 registry,正常 install 都下载不动(即使我开启了ss中的全局模式, fb 油—管都可以正常使用的情况下),比如我想安装个requirejs:
login 也没反应,过了会超时后,就报错:
接下来换了 淘宝npm镜像后,
$ npm config set registry https://registry.npm.taobao.org
装包时速度超快:
那么问题来了,我还是想login,然后发布我的包:
似乎换到淘宝镜像后,秒登陆这时候,可以 npm login了,然后$ npm config edit
, 记事本打开了 .npmrc文件,有如下信息:
这时候,可以看到,说我已经登陆了:
那我再publish一下看看,还是报错了,我也觉得在使用淘宝镜像下,login,似乎并没有登录到 真正的npm上,自然没有权限:
有这么一句看似很关键的信息:
''no_perms Private mode enable, only admin can publish this module: xiaofeng-demo0''
那么出现以上问题,还是因为被q了吗,可是我已经正常f —q了,所以可能有其他方法或者命令解决这个问题,亦或者我这样随意换源,污染了一些东西, 需要重装npm 和 node?
************************201710/27 16:58 更新(填坑)***************************
首先搞明白一件事,淘宝镜像是一个提供国内高速下载的镜像资源,并且每10分钟,就和官方同步一次数据。 所以,平时装包的时候,大可以使用淘宝镜像。
具体怎么使用,网上有很多。你可以通过以下命令,全局安装nrm小工具做快速切换:
npm install -g nrm
nrm use taobao
nrm use npm
或者直接编辑 ~/.npmrc 也可以快速切换(使用记事本,还是直接在命令行里 通过 vi ~/.npmrc
随你便):
总共就2行,先看第一行,把这个地址直接换 淘宝的: https://registry.npm.taobao.org
手动切换就行。
填坑重点来了!
淘宝镜像只是提供下载,如果你要 npm login
、npm publish
登陆发布自己的作品, 你必须要切换到【官方货源】,这点很好理解,毕竟你是要发布到 npm上,而不是 taobao上。
那为什么之前即使用了官方货源,无论install 某个包,或者 login 还是报错呢?注意看下面的关键信息:
EAI_AGAIN:
EAI_AGAIN is a DNS lookup timed out error, means it is a network connectivity error or proxy related error.
这是DNS查找超时导致的,无法解析这个 https://registry.npmjs.org 域名,
这是我自身网络环境导致的。
关于这个报错更详细的可以看看:
Error - errno EAI_AGAIN
里面比较详细地介绍了,关于 NodeJS 的 Error - errno EAI_AGAIN 这种报错。
所以每个人自身的网络情况都不一样,有时候真不能怪npm,我最后是怎么解决的,首先看看自己的npm的版本号,和官网的对比一下:
npm -v
然后试着 npm更新 npm:
npm install -g npm
问题还存在,那就换个网络,比如换个wifi,或者像我一样,拔掉了连接路由器的网线,插上无线网卡(我用的台式),然后连上wifi,就正常使用了, 实测,即使不用淘宝镜像,使用官方的资源,也可以正常下载, 登陆,发布, 只是用了淘宝镜像下载时更快一点而已。
所以遇到 Error - errno EAI_AGAIN ,先好好搞搞自己的网络吧。
当你成功登陆到npm后,你的.npmrc文件会多出来一行,用来记录你的登陆令牌。 这时候表示,你是logged in 了(当然命令行里也会提醒你登陆成功)
(以上的操作不需要fq,至少我是这样,之前是方向走偏了,没看懂报错,明明是自己网路的问题)
最后,非常感谢评论区的小伙伴的帮助!