版本规范和Changelog
#2.2.1 npm包的版本
#Semantic Versioning
前面的是正式版本,后面的是pre-release版本
- major
主版本,一般代表这Breaking Change,例如vue1.x和vue2.x、webpack 3.x和webpack4.x
- minor
次版本,一般代表着新的feature的出现
- patch
一般不包含新功能,知识bugfix或和功能关系不大的修改
- pre-release
- alpha
- beta
- …
- rc(release candidate)
预发行版本,一般用于正式版发行前的验证、联调和测试,和正式版本好之间用-连接
- 大小比较
2.3.2 > 2.2.17 > 2.2.17-beta.1 > 2.2.17-beta.0 > 2.2.17-alpha.1 > 2.2.16
#版本范围
// 1. - 表示范围,边界可等
- 案例: 1.2.3-2.3.4 // 大于等于1.2.3 小于等于 2.3.4
// 2. x 表示通配,和各种语言的通配符一样
x 案例:1.2.x // 大于等于1.2.0 小于1.3.0
// 3. ~ 表示限制minor版本的升级
~ 案例:~1.2.3 // 大于1.2.3 小于1.3.0
// ^ 表示允许第二个非零的版本的升级
^ 案例:^1.2.3 // 大于1.2.3 小于2.0.0
^ 案例:^0.2.3 // 大于0.2.3 小于0.3.0
^ 案例:^0.0.3 // 大于0.0.3 小于0.0.4
#为什么我们要遵循Semantic Versioning ?
- 为了让我们的版本语义和npm社区统一,可以让我们的npm包可以正确的被用户使用
享受社区生态带来的遍历,让我们可以利用社区现有的方案,更灵活的管理依赖的版本
#2.2.2 changelog
什么是changelog?
Changelog是以时间为倒序的列表,记录所有版本的重大变化
- 为什么要有Changelog?
为什么让我提供库和框架的用户了解每个版本发生了哪些变化,提供多于版本号的信息
#2.2.3 自动化的npm包版本控制和Changelog
- release-it
- 根据git commit自动生成版本号
- 自动生成Changelog
- 丰富的hooks用来定制发版逻辑
- 提供插件机制,高度可扩展
release-it 配置文件
{`
“hooks”: {
“after:bump”: “auto-changelog -p”
},
“git”: {
“changelog”: “auto-changelog —stdout —commit-limit false”,
“requireCleanWorkingDir”: false,
“requireUpstream”: true,
“requireCommits”: false,
“addUntrackeFiles”: false,
“commit”: true,
“commitMessage”: “version release ${version}”,
“commitArgs”: “”,
“tag”: true,
“tagName”: “${version}”,
“tagAnnotation”: “Release ${version}”,
“taArgs”:””,
“push”:true,
“pushArgs”: “—follow-tags”,
“pushRepo”: “origin”
},
“npm”: {
“publish”: true,
“publishPath”: “.”,
“access”: null,
“otp”: null
},
“plugins”: {
“@release-it/conventional-changlog”: {
“preset”: “angular”,
“infile”: “CHANGELOG.md”
}
}
}
`
package.json
{
“script” : {
“release”: “release-it”,
“release:alpha”: “release-it —preRelease=alpha”,
“release:beta”: “release-it —preRelease=beta”
}
}
案例:
git add .
git commit -m”feat: update xxx”
yarn release
# 一路回车
#扩展学习资料
.npmrc-npm的配置文件
由于国内网络问题,部分常用的二进制依赖下载速度较慢,为了加速二进制依赖下载,我们可以利用.npmrc配置国内的镜像源:
ELECTRON_MIRROR = “https://npm.taobao.org/mirrors/electron/“ electron
PHANTOMJS_CDNURL = “https://npm.taobao.org/mirrors/phantomjs/“ phantomjs
SASS_BINARY_SITE = “https://npm.taobao.org/mirrors/node-sass/“ node-sass