说起 node,大家都很熟悉了,随着 node 一起下载安装的还有我们的包管理工具npm
(node package manager).我们平时也是一直在使用 npm 的,但大部分时候,我们使用的都是别人的包.假如有一天我们自己写了一个包,想要上传到 npm 上面去,流程是怎么样的?
# 创建项目
创建一个文件夹并且进入这个文件夹
mkdir publish-test && cd $_
# 初始化
初始化生成一个 package 我用的是 yarn,初始化命令如下:
yarn init
大家如果用的是 npm 的话就是:
npm init
一步步的将配置信息填入,也可以直接使用下面的命令快速生成
yarn init -y
注意:这里的包名是不能和 npm 上的包有重复的,有时候包名相似的话 npm 也是会提醒你的,可以去 npm 官方搜索你的包名,看是否已经被使用了
# 包内容编写
新建一个 index.js 文件,随便写一句代码,比如:
console.log(111)
# 准备发布
npm 官方地址 (opens new window) 点击官方地址去注册,并且通过邮箱的验证,若是不通过验证的话,后面的发布流程会提示你去验证, 注册好 npm 账号以后,我们的发布流程就正式开始了.第一次发布的话,我们要使用如下命令:
npm adduser
以后的话,可以使用
npm login
在输入完 npm adduser 之后,就要求输入用户名/密码/邮箱,结果输入完以后出现了一个报错
409 Conflict - PUT http://registry.npm.taobao.org/-/user/org.couchdb.user:ezlou - [conflict] User ezlou already exists
这是因为我们目前的 npm 源是淘宝镜像,淘宝镜像是不允许我们上传自己包的,所以我们要切回原先的 npm 的镜像,如何查看当前的源:
npm config get registry
可以看到我们当前源是淘宝镜像,我们需要将其切换到原先的源
npm config set registry https://registry.npmjs.org
切换完以后,重新登录,出现了如下的提示,说明登录成功
# 发布
npm publish
出现如下图所示:
可以看到 包名+版本 显示在终端上了,说明我们的包已经发布成功了,然后我们去 npm 个人中文看自己发布的包 https://www.npmjs.com/settings/xxx/packages (opens new window) 这里将 xxx 替换成自己的用户名
# 可能会踩到的坑
如下图:
说明你没有发布这个包的权限,很有可能就是因为你的包名和别人的包名重复了.我们修改下包名,在其后面加上一个 2,然后继续发布
这时候可能会提示包名过于类似,并且它建议我们可以使用 @我们的用户名/包名
这样的格式去发布自己的包.并且发布的时候命令变成了
npm publish --access=public
这句话的意思是将我们发布的包变成一个公开包,让大家都能访问到.因为现在我们的包名是 @我们的用户名/包名
这种格式,这种以用户名自己名字开头的包默认是当作私有包的,而私有包是需要收费的,所以如果这时候我们不加上后面的修饰的话,就会出现如下的报错:
我们加上 --access=public
,将其变成一个公开包,重新发布一下,可以看到发布成功了!
自此,我们自己的包就发布成功了,过一会儿别人就可以通过命令下载安装我们的包了
# 更新
如果我们的代码有了更新,我们可以重新将包发布到 npm 上去,但是注意,包的版本号必须和之前是不一样的,npm 不允许上传相同版本的包.这里更新包版本也有两种方式
- 直接在 package.json 中手动修改包的版本
- 通过 npm 指令来修改
npm version patch //补丁版本,最后一位数加1
npm version minor //增加了新功能 中间的数字加1
npm version major //大改动,不向下兼容 第一位数字加1
我们根据这次包的修改内容,来决定我们这次更新的版本号
# 删除
假如我们要删除自己发布的包的话,使用下面的命令
npm unpublish --force
注意:只有在发布的 24 小时内可以删除包
基本上,一个包的发布流程就是以上这些啦!