版本管理
1.version类别介绍
每个npm包中都有一个package.json文件,如果要发包的话,package.json中的version就是版本号了。
version字段结构为:'0.0.0-0'
分别代表:大号.中号.小号-预发布号,对应majon.minor.patch-prerelease
下面来看看npm中version的类别及描述。
major
如果没有预发布号,则直接升级一位大号,其他位都置为0
如果有预发布号:
中号和小号都为0,则不升级大号,而将预发布号删掉。即2.0.0-1变成2.0.0,这就是预发布的作用
如果中号和小号有任意一个不是0,那边会升级一位大号,其他位都置为0,清空预发布号。即 2.0.1-0变成3.0.0
minor
如果没有预发布号,则升级一位中号,大号不动,小号置为空
如果有预发布号:
如果小号为0,则不升级中号,将预发布号去掉
如果小号不为0,同理没有预发布号
patch
如果没有预发布号:直接升级小号,去掉预发布号
如果有预发布号:去掉预发布号,其他不动
premajor
直接升级大号,中号和小号置为0,增加预发布号为0
preminor
直接升级中号,小号置为0,增加预发布号为0
prepatch
直接升级小号,增加预发布号为0
prerelease
如果没有预发布号:增加小号,增加预发布号为0
如果有预发布号,则升级预发布号
2.version 运用
执行命令npm version可以自动更改package.json中的版本号。
比如,package.json包中的version是1.1.1,然后执行如下命令:
npm version prerelease -m "这里你可以添加此次更新版本号的描述"
复制代码
执行完之后,package.json的版本号则会变成1.1.1-0,同时,在git中会多一个commit log。
值得注意的是,执行npm version必须保证工作目录是干净的,没有任何未提交的文档,否则会报错。
git提交规范
一个项目都是由很多人一起合作,然而每个人的开发习惯,提交格式并不统一,这对于统计bug 和 需求有一定困难。
所以,commit message 规范就格外重要。
格式化commit的好处
1.提供更多的历史信息,方便快速浏览。
2.可以过滤某些文档,方便快速查找
3.可以直接从commit生成change log。
commit message的格式
类别: 做了什么 简短描述做了什么
详细描述做了什么(可省略)
复制代码类别type:
feat:新功能
fix:修补
docs:文档
style:格式
refactor:重构(既不是新增,也不是代码变动)
test:增加测试
chore:构建过程中或辅助工具的变动。
例如:
fix: bug(123) 修补了…………
修改了....
feat: 需求(123) 新增了某某功能
详细描述某某功能(可省略)
复制代码
自动生成change log
如果所有的commit都符合格式,那么发布新版本时,change log 就可以用脚本自动生成。
conventional-changelog 就是生成 Change log 的工具。
先命令全局安装:
$ npm install -g conventional-changelog-cli
复制代码
然后进入项目,执行命令:
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -s
复制代码conventional-changelog -p angular -i CHANGELOG.md -w
则会在命令行中生成log,并不会生成文件
上面命令不会覆盖CHANGELOG.md文档,只会在文档前面新增,如果你想生成所有发布的 Change log,要改为运行下面的命令:
$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0
复制代码
如若你不需要手动修改CHANGELOG.md文档,可以自动提交CHANGELOG.md文档:
conventional-changelog -p angular -i CHANGELOG.md -s && git commit -m "docs: 更改CHANGELOG.md"
复制代码
每次执行这么长的命令,很难,我们可以配置在npm中
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
}
}
复制代码
下次运行直接命令:npm run changelog即可。
这时候,可以看见,项目中就会多了一个CHANGELOG.md文档,如果你的提交不符合规范,那么在最开始使用的时候,这个文档里,可能什么都没有。
而且,要注意的是,在我们每次changelog之前,都必须要使用npm version升级版本,否则,commit一直都会有之前的记录。