最近要在项目里引入 git commit
前执行 eslint
校验,通过才允许提交的功能。
考虑到可能会在多个项目中使用,以后也可能会增加其他功能。
然后吧,决定写个小工具,集合了一键安装相关依赖的功能,后续只要不断维护小工具就能扩展功能了。
目前的成果是,写了个包发布在 npm
上,通过命令 npx zwt-fe
即可使用。
效果如下:
想法
一开始
考虑到用户体验,最开始是打算使用类似 一键安装v2ray脚本 那种方式的,用户只需在 终端
输入命令,即可直接使用最新版的小工具,类似这样:
1 | bash <(curl -L -s https://raw.githubusercontent.com/wulabing/V2Ray_ws-tls_bash_onekey/master/install.sh) | tee v2ray_ins.log |
后来
但是考虑到开发成本,一键安装脚本 要使用 shell
开发的,有一定的学习成本,而且有些功能(动效、替换内容等)实现比较麻烦,最后决定用 node
写了,发包到 npm
上,直接使用 npx xx
即可。
eslint + husky
- 提交代码
git commit
时自动调用eslint
校验代码,通过才提交代码。 - 输入
npm run lint:fix
调用esilnt
自动修复相关错误。
实现过程
husky
可以捕获 git
的钩子,在 git commit
前的钩子 pre-commit
上添加 npm run lint
即可以实现。
eslint配置
- 安装依赖:
npm install -D eslint@7.32.0 eslint-plugin-vue@7.16.0 eslint-loader@4.0.2 babel-eslint@10.1.0
。 - 创建
.eslintrc.js
并写入:less xxx > .eslintrc.js
。 - 创建
.eslintignore
并写入:less xx > .eslintignore
。 package.json
的script
中写入:npm run lint
:npm set-script lint "./node_modules/.bin/eslint --ext .js,.vue ./"
。npm run lint:fix
:npm set-script lint "./node_modules/.bin/eslint --fix --ext .js,.vue ./"
。npm set-script
需要npm7 | node15
以上,版本不符合需自己写方法替换 。
husky配置
- 官方文档:https://typicode.github.io/husky/#/?id=features 。
- 安装
husky7
:npx husky-init && npm install
。- 【可选】新增其他钩子:
npx husky add .husky/pre-commit "npm test"
。
- 【可选】新增其他钩子:
- 修改命令
echo "npm run lint" >> ./husky/pre-commit
。 - 【可选】添加
path环境变量
(sourceTree
用):echo "export PATH=\"$(dirname $(which node)):\$PATH\"" > ~/.huskyrc
。
其他: node路径
__dirname
:node
命令所在文件的路径 。./xx
:执行node
命令时的路径 。- 特例:在
require('./xx')
时,和__dirname
一样,是所在文件的路径 。
commitlint + git cz + changelog
- 提交代码
git commit
时自动校验commit message
的格式,符合Angular规范的才提交成功 。 - 使用
git cz
或git-cz
代替git commit
,用工作流的方式添加符合规范的commit message
。 - 根据
git log
自动生成CHANGELOG.md
,需要注意:npm run changelog
: 在CHANGELOG.md
内生成自上次npm run changelog
后至package.json.version
更新之间的git
提交记录。只添加在最后,不覆盖文件。- PS:所以,使用
npm run changelog
更新记录前,需手动修改package.json
中的version
,或使用npm version major|minor|patch
自动更新package.json
中的version
。
- PS:所以,使用
npm run changelog:all
:在CHANGELOG.md
内生成从项目创建开始到现在的git
提交记录,会覆盖文件。
实现过程
commitlint配置
- 安装依赖:
npm install -D @commitlint/cli@13.1.0 @commitlint/config-conventional@13.1.0
。 - 创建
commitlint.config.js
并写入:less xxx > commitlint.config.js
。- 【可选】安装
husky
:已安装可忽略npx husky-init && npm install
。
- 【可选】安装
- 添加钩子:
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
。- 【可选】测试效果:
echo "foo" | ./node_modules/.bin/commitlint
。
- 【可选】测试效果:
git-cz配置
- 官方文档:https://github.com/streamich/git-cz 。
- 官方文档:https://github.com/commitizen/cz-cli/blob/master/README.md 。
commitizen
默认使用cz-conventional-changelog
,只能显示英文,如要显示中文需使用git-cz
并修改配置文件changelog.config.js
。- 安装
commitizen
和git-cz
:npm install -g commitizen git-cz
。 - 初始化
git-cz
:commitizen init git-cz -D -E --force
。 - 创建
changlog.config.js
并写入:less xxx > changelog.config.js
。
changelog配置
- 安装依赖:
npm install -D conventional-changelog-cli
。 - 写入脚本到
package.json
:changelog
:npm set-script changelog "conventional-changelog -p angular -i CHANGELOG.md -s"
。changelog:all
:npm set-script changelog:all "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
。