发布、更新、删除 npm 发布包

前言

我们经常使用npm来下载别人的模块或者说包,那么我们如何将自己写的模块上传到npm呢?

了解npm政策

在开始之前,最好回顾一下npm的政策,以防您对站点礼仪、命名、许可或其他指导原则有疑问。

发布包

1、创建用户帐户,要发布,您必须是npm注册表上的用户。如果您不是用户去npmjs.org注册一个npm的账号,或者使用npm adduser创建一个帐户。如果您在站点上创建了一个用户帐户,请使用npm登录从您的终端访问您的帐户。

img

img

2、验证邮箱

随便发点东西给邮箱就OK

img

img

3、登录

命令:npm login

img

4、查看当前用户

命令:npm whoami

img

检查您的用户名是否已添加到注册表https://npmjs.com/~username

5、新建一个文件夹并进入

6、初始化一些包的相关信息

命令:npm init

img

  • package name(包名字)
  • version(包版本)
  • description(包描述)
  • entry point(包里面主文件也就是入口地址)
  • test command(包的测试命令是什么,可以先不指定)
  • git repository(git地址,这样就可以从npm官网直接点到git上,可以先不指定)
  • keywords(关键字,别人搜东西时怎么搜到比较方便)
  • author(作者)
  • license: (ISC)(包遵循什么样的开源协议)

之后会生成一个package.json文件

7、新建一个文件用来存放包(模块)

img

8、发布包(模块)

命令:npm publish

img

9、在官网npmjs.org搜索查看我们上传的包(模块)

更新包

10、如果我们更新了包(模块)

  • 首先修改package.json文件中的版本

img

img

  • 然后执行命令npm publish发布新版本

img

  • 在官网查看

img

删除包

11、如果我们想要删除包(模块)

这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!)

  • 首先如果就是想要删除当前的这个版本,执行命令npm unpublish xxx(包名),去官网查看发现已经没有这个包了,如果权限不够加上 --force

img

img

  • 使用命令npm unpublish xxx@1.1.1(包名@版本名)删除指定版本
  • 根据规范,只有在发包的24小时内才允许撤销发布的包( unpublish is only allowed with versions published in the last 24 hours),需要我们发邮件给官方来删除
  • 即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)
  • 例如我在撤销包后尝试再发布同一名称+同一版本的包

img

报错,并建议我修改包的版本

npm unpublish的推荐替代命令:npm deprecate [@]

使用这个命令,并不会在社区里撤销你已有的包,但会在任何人尝试安装这个包的时候得到警告

例如:npm deprecate penghuwanapp '这个包我已经不再维护了哟~'

注意事项

  • 【注意点1】不能和已有的包的名字重名!

  例如我尝试把包名改成'react'显然已有的包:

  img

  然后发包的时候就会...

  img

  (翻译:你没有发布react包的权限,请问你是以react所有者的身份登陆的吗?)

  【提示】在发包前可以通过npm的搜索引擎查找是否已存在相同名称的包

  • 【注意点2】还有一点要注意的是npm对包名的限制:不能有大写字母/空格/下滑线!

  (其实在上面的例子中我原本打算写成penghuwanAPP的,报错。。。改成penghuwan_app,又报错,最后不得不改成penghuwanapp。。。)

  img

img

  • 【注意点3】你的项目里有部分私密的代码不想发布到npm上?

  将它写入.gitignore 或.npmignore中,上传就会被忽略了

参考

【npm】利用npm安装/删除/发布/更新/撤销发布包