手把手教你如何用npm发布包

热乎乎的nodejs进阶教程第二篇来了,若是第一篇没看过,建议你们先移步到第一篇npm使用技巧和最佳实践html

这篇讲述如何发布一个npm模块,你们平时都是下载各类第三方的npm包到本身的项目,身为一个有追求的程序员,确定要学学本身造轮子,今天手把手教你们如何发布一个本身开发的npm包到npm仓库,让别人也能下载使用你开发的npm模块。前端

立刻开始!!!node

npm模块发布

当咱们开发node应用的时候,npm仓库上有不少现有的模块能够帮助咱们提升开发效率,像日期处理,字符串处理这些低级的事情咱们就不须要本身作了,由于npm仓库有不少包能够处理这些,咱们直接引入使用便可react

那么问题来了,你有没有想过npm仓库上的模块来自哪里,又是怎么发布上去的?git

这篇文章的目标就是解决上面的这些问题的,let's go!!!程序员

npm上面长千上万的包来自哪里

npm上成千上万的模块是存储在一个巨大的仓库,地址是 https://registry.npmjs.org/,因此咱们要发布本身开发的模块的话,也是发布到这里,下面来看看怎么发布npm

如何把npm包放到npm仓库

1 建立一个模块

打开命令行,新建一个目录mkdir npm-publish-test,执行npm init -y初始化一个默认的包文件package.jsonjson

{
  "name": "npm-publish-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
复制代码

package.json中最重要的属性是name和version两个属性,这两个属性一块儿造成了一个npm模块的惟一标识符, 这两个属性是必须的,不然模块就没法被安装,。模块中内容变动的同时,模块版本也应该一块儿变化至于怎么变化,后面会介绍。bash

  • name,你的模块名, 须要保证惟一,npm仓库上的模块名是不能重复的
  • main描述了当你用require('modulename')引用这个模块的时候,引用的是哪一个文件,这个字段的值你能够采用默认的或者修改为你项目中任何一个有效的文件
  • keywords也应该包含在包文件里面,npm是根据keywords的值去索引模块的,这样其余人才能经过搜索这些关键字从而找到你的模块
  • author就是你了,可是若是你的项目不是你一我的来发的,那么你也应该将你的开发伙伴一块儿添加进去

package.json还有不少字段,想全面了解移步这篇文章前端框架

2 license

单独开个小节,来讲明license这个字段的意思

license是开源许可说明。在开源世界里,license是具备法律效力的,经过选择相应的license,版权拥有者能够声称本身相应的权利,包括其余人使用、修改、引用、共享等一系列涉及版权的操做。

各大组织设立了为代码开源许可的规范文档,看成者声明此文档类型时,他人必须遵照该文档类型的规范。

国际公认的开源license,有多达80余种,一张图带你了解比较经常使用的几种开源许可协议(原图来自阮一峰大神,本身稍微修葺了一下)

关于开源许可协议,你们要了解去网上看吧,这里再也不赘述,咱们放松一下,来听个小故事吧


Facebook + React的变脸

2016年5月,Facebook开源了前端框架React,平地一声雷,引来前端界震动。

同年7月,Facebook在React开源许可协议中的附加专利条款,条款的精髓归纳一下就是"若是你以为Facebook侵犯了你的知识产权,你不能起诉Facebook;若是Facebook起诉你,那么你不能反诉,不然你就当即中止使用React",反正怎样挨打的都是你,而后你们都被Facebook的流氓行径搞炸了,说好的开源共享精神呢???

随后,Apache、WordPress等组织陆续宣布封杀或弃用React,同时,中国互联网的一批企业开始意识到问题严重性,寻求新的前端技术来替代React

若是当时大家公司采用的技术栈是React, 可是大家不为所动,仍是继续无所忌惮使用的话,原谅我这个老实人要说大实话了,那大家公司在互联网行业的水平和地位,嗯嗯嗯。。。。。你们都懂的。

10月,Facebook迫于开发者和开源社区的压力,宣布将react及其余一系列采用BSD+专利许可协议的软件改用MIT许可。

瞧瞧!小扎多精明,除了会敲代码,变脸技术也不赖! 虽然一波三折,最后仍是开源共享了,再加上这张帅脸把持,咱们仍是选择原谅他吧。


故事讲完了,想知道怎么选择软件许可协议的小伙伴,请移步这个网站

3 语义化版本

version很是重要!!!在此再重申一遍!!!

教程的第一篇已经详细解释了npm模块版本的问题,这里再重申一遍npm的语义化版本定义:major.minor.patch(大版本.小版本.补丁版)

  • 大版本,作了不兼容的API修改
  • 小版本,添加了向后兼容的功能
  • 补丁版,作了向后兼容的bug修复

版本不是为机器定义的,是为用户定义的,因此你项目作了改变的时候,记得同步更改对应版本,版本号的定义请严格按照语义化版原本。

4 加入说明文档

若是你要向别人分享你的代码,那么有一个合适的说明文档就很是有必要了,一般在你项目的根目录放一个README.md就够了

这个是规范性要求,不是强制性要求,你要是任性不放,我也不会打你

你要是以为你们时间多到用不完还有心情去看你的代码,而后搞明白你的代码是干什么的以及如何使用,你能够试试不加。

5 私有文件不要上传

.npmignore文件来记录不发布的私有文件,在这个文件里面添加你不想上传的私有文件

这个文件和在在git项目中使用.gitignore的效果是同样的,npm和git同样,会查找你包里面全部目录中的.npmignore和.gitignore文件

6 注册npm帐户

你左思右想,奋笔疾书,洋洋洒洒写了一篇自觉得很棒的文章,准备发布到网上,吸引无数粉丝,阅读破万,一跃成为网红写手,想一想都好激动!!!对此,我只能

冷静一下

在发布以前,还有一件很重要的事情要作,去npm官网注册用户,不然你没有权限在npm仓库发包

注册的方式有两种

  1. npm官网注册,和你平时注册一个网站帐户大同小异
  2. 用命令行注册

身为一个程序员,必定要有逼格,因此个人选择确定不是第一种

命令行注册步骤:在命令行执行npm adduser, 按照提示依次输入用户名,密码和邮箱,我就随便注册了一个用户给你们演示一下

上面显示已经注册成功了,可是去npm的官网用这个帐号登录不进去,报错以下

细心的小伙伴应该已经找到缘由了

还没找到缘由的小伙伴,请仔细看看上面我注册的地址

my god! 这哪是注册到npm上去了,这是注册到npm的淘宝镜像了,因为以前我为了npm包下载的更快,配置了这条命令 npm config set registry https://registry.npm.taobao.org 晕,不当心中招了

如今切换到官方仓库地址,执行 npm config set registry https://registry.npmjs.org/ 执行npm adduser从新注册一个

而后咱们用新注册的帐号再去登录, Bingo!

特别说明:平时开发,你们能够把npm的registry设置成淘宝镜像源来加快开发效率,可是你们若是要发布包,建议一开始就把npm的registry配置成官方镜像地址,否则后面发布还会出问题!!!

7 npm包发布

开发包我就不说了,你不会我也没办法,呵呵,本地测试本身开发包第一篇教程已经讲了,如今咱们直奔主题,如何发布这个已经开发好的包。 在项目根目录下执行

npm whoami //验证你的凭据已存储在客户端,注册成功了就会显示你的用户名
npm publish --access=public //若是是公开包这样发布,若是不是公开的包则去掉--access=public便可
复制代码

8 更新一个已经发布的包

当你更改了代码,准备从新发布包的时候

先执行npm version major/minor/patch更新对应版本,

而后再执行 npm publish进行发布

9 删除包

  • 一、删除指定的版本
npm unpublish 包名@版本号
复制代码
  • 二、删除整个包

npm unpublish 包名 --force

后记

最近公司的任务很少,因此就多了不少时间来写文章,感受本身快成二师兄了

谁知道啥时候忙起来,就很难保持高更的频率了

虽然任性了一点,可是我作人仍是有底线的,一个月2篇+文章仍是有保证的,毕竟要同时兼顾质量和数量。

最后,公总号同步更新,欢迎扫码关注,第一时间获取更新动态。

相关文章
相关标签/搜索