前段时间遇到了一些bug需要改公司的npm包,所以重新复习了一下npm的包发布流程总结并水了一篇文章。
初始化
npm init
初始化命令执行后会生成下面这个json文件
// package.json
{
"name": "packageName",
"version": "1.0.0",
"description": "",
"main": "index.js",// 这里是包执行的主入口文件
"bin": {}
"command": "./bin/index"// 这是写cli要执行的入口位置
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "http://www.github.net/xxxx.git",
"directory": "./dist/exce"//你的包在工程中的导出目录
},
"author": "",
"license": "ISC",
"dependencies": {
}
}
本篇主要讲发布流程和包的版本管理,所以不再赘述怎么写包了
发布
当我们写好一个包要发版改怎么办。 如果是个人开发者不想直接写完发了那就直接
$ npm login ## 登录你的npm账号
Username: name
Password: *****
Email: (this IS public) xxx@mail.com
输入命令后需要你填入
- npm用户名
- 账号密码
- 账号关联邮箱
- 邮箱验证码
确认好你的 package.json 中的版本号之后
$ npm publish ## 在包路径内直接发布
## 或者你也可以使用
$ npm publish xxx.git ## 直接发布git项目路径
tips: 发布前确保 git status 为空状态,即当前没有任何更改操作。
简单的发布过程到此为止
按照官方文档的发布方式
$ npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>] [--otp otpcode] [--dry-run]
## Publishes '.' if no argument supplied Sets tag 'latest' if no --tag specified
官方文档中提供了 --tag --tarball 命令其实不太适用。
我们在实际开发过程中更倾向于使用 git tag 对各个版本做管理
版本号
发布包之前可以通过 npm view [packagename] version 或者 npm view [packagename] versions 查看包的最新版本号和各版本号。
版本号遵循 SemVer规范
SemVer规范的标准版本号采用 X.Y.Z 的格式,其中 X、Y 和 Z 为非负的整数,且禁止在数字前方补零。
- X 对应主版本号(
major):当项目中做了不兼容的 API 修改,属于大版本提升 - Y 对应次版本号(
minor):当你做了向下兼容的功能性新增 - Z 对应修订号(
patch):当你做了向下兼容的问题修正。
每个元素必须以数值来递增。
发布过程中可能会遇到的问题
-
PUT 403 npm ERR!:
1-1.
npm ERR! 403 403 Forbidden - PUT r.cnpmjs.org/scaffold - [no_perms] Private mode enable, only admin can publish this module
发布的镜像错了,本地在使用cnpm的镜像。
执行
npm config set registry=http://registry.npmjs.org这个命令改变npm源即可1-2.
.npm ERR! 403 403 Forbidden - PUT registry.npmjs.org/packagename - You cannot publish over the previously published versions: x.x.x.
. 发布包版本已存在
-
npm ERR! 401 Unauthorized:未登录就执行了 npm publish
-
在 npm 发布了包,但是同事用 cnpm 却无法获取最新版本。
可以使用 cnpm sync [packagename] 或者直接打开网站同步
https://npm.taobao.org/sync/packagename packagename替换成你发布的包名