前端工程化之版本规范
npm包版本
semantic versioning (语义化版本) 格式
- major
主版本,一般代表着Breaking Change,例如vue 1.x和vue 2.x、webpack 3.x和 webpack 4.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.2.3-2.3.4 等价于 >=1.2.3 <=2.3.4
// x表示通配,和各种语言的通配符一样x:
1.2.x 等价于 >=1.2.0 <1.3.0
// ~ 表示限制minor版本的升级
~1.2.3 等价于 >=1.2.3 < 1.(2+1).0 等价于 >=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包可以被用户正确的使用。
-
享受社区生态带来的便利,让我们可以利用社区现有方案,更灵活地管理依赖的版本。
changelog
什么是Changelog?
Changelog是以时间为倒序的列表,记录所有版本的重大变动。
为什么要有Changelog?
为了让我们提供的库和框架的用户了解,每个版本发生了哪些改变,提供多于版本号的信息。比如commit id 和提交作者等。
release-it
自动化版本管理。
-
根据git commit自动生成版本号
-
自动生成changelog
-
丰富的hooks用来定制发版逻辑
-
提供插件机制,高度可扩展
配置文件 .release-it.json
{
"github": {
"release": true
},
"git": {
"changelog": "npx auto-changelog --stdout --commit-limit false",
"requireCleanWorkingDir": false,
"requireUpstream": true,
"requireCommits": false,
"addUntrackedFiles": false,
// 自动提交
"commit": true,
// 如果实现未git commit,那么将这个字符串设置为commit msg
"commitMessage": "release: v${version}",
"commitArgs": "",
// 自动打tag
"tag": true,
"tagName": "${version}",
"tagAnnotation": "Release ${version}",
"tagArgs": "",
// 自动推送到github
"push": true,
"pushArgs": "--follow-tags",
"pushRepo": "origin"
},
"npm": {
// 自动发布到npm上
"publish": true,
"publishPath": ".",
"access": null,
"otp": null
},
"hooks": {
"after:bump": "npx auto-changelog -p"
},
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
}
}
生成Changelog文件,需要安装@release-it/conventional-changelog
插件,并在.release-i.json
文件中配置。
{
"plugins": {
"@release-it/conventional-changelog": {
"preset": "angular",
"infile": "CHANGELOG.md"
}
}
}
当我们提交代码后,release-it是如何知道更新哪个版本的呢?
它通过我们提交的commit message来确定的。这种commit message叫做angular commit规范。
angular commit规范
在 Angular 中,推荐使用规范化的提交信息格式,也称为“Commitizen”规范,以帮助项目成员更好地理解提交的修改和目的,进而更好地协作开发。该规范的提交信息格式如下:
<type>(<scope>): <subject>
<body>
<footer>
各个字段的含义如下:
type
(必需):表示代码修改的类型,可以是feat
(新功能)、fix
(缺陷修复)、docs
(文档)、style
(格式或样式调整)、refactor
(重构代码)、test
(新增或修改测试)、chore
(构建或工具流程)等。scope
(可选):表示被修改的部分,如页面、组件、服务等。不是每个修改都需要指定 scope。subject
(必需):简洁地描述了所做的更改。body
(可选):更详细的描述提交的修改信息,可以包含多行。footer
(可选):包含一些元信息,如与其他问题的链接、关闭的问题等。
例如:
feat(login): add remember me functionality
Add remember me checkbox to login page
Closes #123
该提交信息表明了代码修改的类型为 “新功能(feat)”,涉及的部分是“登录(login)”,描述了增加“记住我”功能,详细描述为“添加了登录页面上的记住我复选框”,并将跟踪和关闭问题 #123。
使用规范的提交信息格式可以帮助开发者清晰、精确记录每一次代码提交,更好地与团队协作,同时方便追溯修改记录和排查问题。
转载自:https://juejin.cn/post/7240248679515635771