npm远程package的删除失败及解决方案

时间:2024-05-18 17:33:40

首先npm包的一些基本操作命令如下:

  1. npm init:初始化一个npm包,一般会有选项配置,可根据自己情况来写,具体可查看官网。
  2. npm login:本地登陆npm。
  3. npm publish <package>:上传包到远程npm。
  4. npm unpublish <package> --force:将远程的npm包删除。
  5. npm deprecate <pkg>[@<version>] <message>:如果不删除,仅仅不让别人使用,可以使用此命令;此命令将更新 npm 注册表中指定包所对应的数据条目, 为尝试安装它的所有人提示版本作废的警告信息。

一般我们进行上传包及之前的一些操作都不会有太大问题,就算报错啥的,都比较容易解决,比如,执行npm login时,无法成功登陆,一般就是由于使用淘宝npm,导致登录失误,因为登录的是淘宝的npm 仓库源,淘宝应该不会给你提供登录服务,把npm registry换成官方的就可以了。
这里我们主要讲一下执行npm unpublish <package>时报的错以及如何解决。首先给大家贴出报错信息图,如下图:
npm远程package的删除失败及解决方案
上图是进行删除上传到远程npm的包时报的错误,刚开始以为命令没执行到位,就执行了多遍:npm unpublish <package> --force 这条命令,但是结果依旧如上图所示,于是乎,查了好多资料,折腾了半天都没用,最后,实在没办法,就认真看了一下报错信息,里面有提到TFA和OTP,此时,并不知道OTP是什么,但TFA貌似和npm官网的2FA应该是有关,最后才明白,其实就是同一个东西,是Two Factor Authentication 这三个英文的缩写,俗称双因子验证,说白了,就是为了安全,进行的双重验证,一般我们登陆只需要账户名和密码,开了2FA就会在之前的基础之上再加一层验证,比如令牌验证,指纹验证,刷脸等其他一些安全验证方式。
npm这里一般操作是:先点进去你要删除的包----->会看到页面上有个Admin,同一行会有Readme、Dependencies、Dependents、Versions,点击Admin----->此时会出来密码输入登陆框,输入npm账户密码并登陆进去,界面如下图1所示----->此时,如果你没开通过2FA,就会看到一个提示你操作的界面,一般默认选第一个label选项,点击下面的提交按钮,界面如下图2所示----->此时会出现新的界面,会让你用一个app软件扫屏幕上的二维码,app上会收到一个验证码,在有效时间内,填入下面的框内,并确定,后面会出现5个code码,自己保存下来即可,以后估计会用到,这5个code码不能让别人知道。此时,所有操作就完成了,具体如何操作后面会细讲。
npm远程package的删除失败及解决方案
npm远程package的删除失败及解决方案
下面讲一下最后一步如何操作:

  1. 首先在手机上下载一个名叫 Authenticator 的软件
  2. 进入软件,选择最后一个“其他账户”
  3. 点击“其他账户”,对最后一步页面上出现的二维码进行扫描
  4. 成功后,手机上会出现一个npm账户,就你自己的账户,下面会不断更新一个验证码,将这个验证码在有效时间内填入最后一步操作页面中的验证码输入框内,提交即可

以上全部成功顺利完成后,再次执行 npm unpublish <package> --force 进行删除操作,此时会有一个惊喜出现,如下图所示:
npm远程package的删除失败及解决方案
是不是此时感到很惊喜,很意外,没错,我一开始以为已经没问题,期待着可以成功删除,结果却报出以上所示的错误,那么,就得想办法解决它,思路依旧和之前一样,先认真读取报错信息,进行错误分析,找出问题所在,从上面的报错信息里可以看到有这么一句话: You can provide a one-time password by passing --otp=<code> to the command you ran. 没错,这句话就已经告诉了你答案,不知道大家有没有注意到这句话中的 --otp=<code>,其实就是在刚才执行的命令里少了这个参数,此处的<code>指的是你手机上不断更新的验证码值,必须在有效时间范围内,具体命令执行效果如下图所示:
npm远程package的删除失败及解决方案
上图中命令中的national-township-area是我自己要删除的包名,此处可以替换成你们自己的即可,上图中的296661就是手机上动态获得的验证码,按照上面的命令执行操作,就会成功删除远程你要删除的包。

注意:这边文章主要是为了帮助大家解决实际当中的问题,节省大家的时间成本,如果大家有什么问题或建议,欢迎随时提问题给我,本人如果看到会积极与大家探讨解决。