关于npm:npm-发布包遇到的问题

3次阅读

共计 1962 个字符,预计需要花费 5 分钟才能阅读完成。

引子

尽管有公布过包的经验,但没有公布过本人的包,于是就参照 npm developer guide 尝试了一下,有了上面的播种。

  • Origin
  • My GitHub

403 Forbidden

依照文档中的步骤,注册登录后,筹备好了库,而后执行 npm publish,报了上面的谬误:

Error: 403 Forbidden – PUT https://registry.npmjs.org/xx – You do not have permission to publish “xx”. Are you logged in as the correct user?

查问材料后,发现了这个 issue,原来是因为公开的库外面,曾经有了同名的库。因为是收费的账号,所以想在 npm 上发包,要么换个名称,要么花钱创立公有包。还有一种形式就是在内网搭建本人的服务。

Error: 402 Payment Required

换了个名字,想起了本人见过的库,就模拟加了个 @ 前缀的包,再次公布的时候,报了上面的谬误:

Error: 402 Payment Required – PUT https://registry.npmjs.org/@x… – You must sign up for private packages

查看文档,发现 @npm/package-name 这种模式的包名,是有作用域的包名模式,执行 npm publish 的时候默认是公布公有的包。因而,第一种形式是花钱买公有包的服务,另外一种形式就是指定参数,示意公开:

npm publish --access public

须要留神的是这种模式的包名跟 npm 账户有对应关系,不能轻易填写。

npm init --scope=@my-org

这种模式示意是一个组织,my-org 对应是 npm 中的组织名。

npm init --scope=@my-username

这种模式示意是集体,my-username 对应是 npm 中的用户名。

对旧包的解决

在尝试的过程中,公布了一些包,想着只是测试的包,想要移除掉,但 npm 官网很不举荐这种做法,举荐用 npm deprecate 指令,告知安装者相干信息,例如“我不再保护这个库了,请不要应用”。

npm deprecate package-name "This is test package, do not use it!"

其中 package-name 是指公布的包的名称,可能跟库的名称不一样。

公布胜利了,但在 npm 上找不到包

在一次公布中,看到公布胜利的提醒,但到 npm 账户发现没有相干的包。

重复尝试了几次,发现原来是因为本人本地 registry 指向了内网的一个地址,并没有指向 npm 官网的地址 https://registry.npmjs.org/

所以发包的时候,先确定一下公布的指向:

npm config get registry
或
npm config list

如果发现指向不对,有两种批改的形式:
形式 1:应用 npm config set registry 改成对应的指向,但这个是全局批改,之后如果须要公布其它指向的包,又要批改回来。

形式 2:执行指令时增加 --registry 参数
package.json 中增加参数:

"publishConfig": {"registry": "https://npm.pkg.github.com/"}

登录的时候,增加对应的参数:

npm login --registry=https://registry.npmjs.org/

在应用 npm deprecate 指令的时候,如果本地 registry 指向不对,也要增加 --registry 参数才会无效。

如何判断 npm 账户是否已登录

因为公布的包有不同的 registry 指向,在公布包的时候,登录要指向不同的源,所以公布之前想要看看是否已登录。

查看了文档,没有找到查看登录状态的特定命令,但能够应用能触发登录查看的命令,从侧面看是否已登录。

很容易想到的就是 npm login 命令,但登录过一次后,再执行时还是提醒输出账号密码。

起初发现了一个简略的指令 npm whoami,这个指令只能在登录状态下执行,没有登录就会提醒:

npm ERR! code ENEEDAUTH

npm ERR! need auth This command requires you to be logged in.

npm ERR! need auth You need to authorize this machine using npm adduser

须要留神的是,这指令不带 registry 参数时,会指向 npm 默认的 registry,如果这个不匹配,也是没有成果的。

当有多个 registry 时,肯定要留神,不少的指令都须要统一的 registry 才无效。

参考资料

  • npm help docs
  • Creating and publishing scoped public packages
  • npm-deprecate
  • npm-config
正文完
 0