Git相关依赖介绍
依赖 | 作用描述 |
---|---|
husky | 操作 git 钩子的工具(在 git xx 之前执行某些命令) |
lint-staged | 在提交之前进行 eslint 校验,并使用 prettier 格式化本地暂存区的代码 |
@commitlint/cli | 校验 git commit 信息是否符合规范,保证团队的一致性 |
@commitlint/config-conventional | Anglar 的提交规范 |
commitizen | 基于 Node.js 的 git commit 命令行工具,生成标准化的 commit message |
cz-git | 一款工程性更强,轻量级,高度自定义,标准输出格式的 commitize 适配器 |
commit拦截(husky + lint-staged)
我们的目的是在 git commit 之前,先强制执行prettier格式化(防止某些成员开发期间不开启编辑器格式化)、再检查代码规范,如果检查不通过、阻止提交。
1. 新建 .eslintignore + .prettierignore
.eslintignore
、.prettierignore
,内容参考如下:(没使用eslint和prettier可跳过)
1 | .DS_Store |
2. husky:操作git钩子的工具
(1)安装:
1 | npm install husky -D |
(2)使用(为了添加.husky
文件夹):
1 | // 1、打开package.json文件,在scripts中添加 |
3. lint-staged:本地暂存代码检查工具
git commit 之前,会自动使用 prettier 格式化 ignore 之外的代码。格式化后,自动检查所有文件,是否全部符合 eslint 规范。存在不符合规范的代码,git commit 将被终止。
(1)安装:
1 | npm install lint-staged -D |
(2)添加 ESlint Hook(在.husky 文件夹下添加 pre-commit 文件)
执行以下命令,在husky文件夹下会自动生成pre-commit文件:
1 | npx husky add .husky/pre-commit "npm run lint:lint-staged" |
作用是通过钩子函数,判断提交的代码是否符合规范,并使用 prettier 格式化代码
(3)项目根目录下手动新增 lint-staged.config.js
文件:
1 | module.exports = { |
规范commit内容(husky + commit-msg)
commitlint是一个开源的msg的提交规范库,使用 commitlint 可以规范我们每一次的 commit,我们也可以用来自动生成 changeLog 等文件,方便代码管理。
1. commitlint: 制定提交规范
(1)安装:
1 | npm i @commitlint/cli @commitlint/config-conventional -D |
(2)配置命令(在.husky 文件夹下自动生成 commit-msg 文件,执行如下代码自动生成):
1 | npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"' |
2. commitizen:基于 Node.js 的 git commit 命令行工具,生成标准化的 message
1 | // 安装 commitizen,如此一来可以快速使用 cz 或 git cz 命令进行启动。 |
3. cz-git
(1)指定提交文字规范,一款工程性更强,高度自定义,标准输出格式的 commitizen 适配器
1 | npm install cz-git -D |
(2)配置 package.json:
1 | "config": { |
(3)新建 commitlint.config.js
文件:
1 | // @see: https://cz-git.qbenben.com/zh/guide |
验证
1. 配置package.json命令
1 | { |
2. 配置完成,提交代码
1 | npm run commit |
3. 效果如下
根据 commit message 自动生成 changelog
1. 安装依赖
1 | npm install conventional-changelog conventional-changelog-cli --save-dev |
2. 添加脚本
1 | { |
3. 生成CHANGELOG.md文件
直接运行下面的命令即可
1 | npm run changelog |
如果type为feat、fix、perf、revert,则该 commit 将肯定出现在 Change log 之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。
注意:版本的log使用 npm version 才会生成新的log,手动修改 package.json version 不会有新的版本log。
4. package version
npm version [ | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git]
npm version 命令用于更新和设置包的版本号,并可以自动创建并提交Git标签以及更新package.json文件。该命令的语法如下:
1 | npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease | from-git] |
每个参数的含义如下:
<newversion>
:这是一个可选的参数,表示你要将包的版本号更新为的具体版本号。可以是任何有效的版本号,如1.2.3。如果提供了这个参数,它将直接设置包的版本号为指定的值。major:这是一个可选的参数,表示要执行主版本号升级。执行此命令后,包的主版本号将加1,次版本号和修订号将重置为0。
minor:这是一个可选的参数,表示要执行次版本号升级。执行此命令后,包的次版本号将加1,修订号将重置为0。
patch:这是一个可选的参数,表示要执行修订号升级。执行此命令后,包的修订号将加1。
premajor:这是一个可选的参数,表示要执行主版本号升级,并在版本号后添加一个预发布标签(如-alpha.1)。
preminor:这是一个可选的参数,表示要执行次版本号升级,并在版本号后添加一个预发布标签。
prepatch:这是一个可选的参数,表示要执行修订号升级,并在版本号后添加一个预发布标签。
prerelease:这是一个可选的参数,表示要在当前版本号的基础上添加一个预发布标签。
from-git:这是一个可选的参数,用于根据最新的Git提交信息自动确定新版本号。这可以用于生成一个语义版本号,根据Git提交历史中的特性和修复来决定。
npm version 命令通常用于升级包的版本号,并且在升级后,它会自动创建一个Git标签,以及在package.json中更新新的版本号。你可以根据项目需求选择不同的参数来执行不同类型的版本升级和预发布标签。
通过使用npm 钩子,可以做一些自动化的东西,例如:
1 | { |
5. 自定义conventional-changelog
1 | const compareFunc = require('compare-func') |
最后在 package.json 中的 scripts 添加一条语句
1 | "changelog": "conventional-changelog -p custom-config -i CHANGELOG.md -s -r 0 -n ./changelog-option.js" |
注意:本项目中用到了 custom-config,因此需要先安装 custom-config【单纯的 changelog-option.js 是不完整的配置,在此只修改了自己需要的部分,其他部分默认】,如果不加这个插件,是不生效的。
1 | npm i conventional-changelog-custom-config compare-func -D |
最后再运行npm run changelog