痛点
- 以上的封装,都是为了在编码的过程中可以有一个好的编码风格和规范。此外,因为使用的是Typescript,在编码过程中,如果过多的使用
any将毫无意义。并且,有些ts检测可以通过@ts-ignore进行规避,这样加入的ts编码规范也得不到体现 - 就是提交阶段,你编码完成了,但是此次编码修改了哪些内容,应该在
commit中体现出来
做什么?
根据上面的痛点,其实可以知道,上面的问题都是针对提交阶段的,因为我在开发的过程中,用多少ignore或者any,其实我不关心,因为可能存在临时过渡期。所以,这里的规范,都是在提交阶段进行检测
- 在提交阶段:检测修改的文件,是否过多的使用
ignore、any - 在提交阶段:检测输入的commit是否符合规范
调研
- githooks: 是一些自定义的脚本,
用于控制git工作的流程 - 配套工具库:
husky、lint-staged - husky: 对git执行的一些命令,通过对应的hooks钩子触发,执行自定义的脚本程序
- pre-commit:脚本插件。只检测
git add .时的缓存文件,对缓存文件执行脚本 - commit-msg:在
git commit时触发 - 分为
客户端钩子、服务端钩子
husky配置
用新的配置方式
- 安装
husky
// package.json
{
scripts: {
prepare: "npx husky install", // prepare是在npm install之后执行的
}
}
执行完husky install命令后,可以看到一个.husky/的目录。这个目录就是未来存放git hooks的目录
- 添加
pre-commit钩子
// 添加git hooks - pre-commit
npx husky add .husky/pre-commit "npx lint-staged" // 这里会在pre-commit钩子阶段,触发lint-staged命令
lint-staged的配置还是放在package.json中就可以
- 配置
lint-staged检测
// package.json里lint-staged配置/命令
"lint-staged": {
"src/**/*.{ts,tsx}": [
"npx check.js", // 这里就是pre-commit钩子执行,如果这里没有问题,才会触发后面的 git add.否则会抛出错误
"git add"
],
},
ignore检测(pre-commit)
- 上面有提到
ignore和any,但是这里为了简洁,只检测ignore - 利用babel检测
- 代码地址:代码地址
commit(commit-msg)
开发中,肯定存在:开发、修改bug、优化、提交打包文件等等工作。针对不同的行为,应该使用不同的msg
- 安装
commitlint
npm install -D @commitlint/config-conventional @commitlint/cli
- 添加
commit-msg钩子
// git hooks - commit-msg 添加 shell脚本命令
npx husky add .husky/commit-msg "npx commitlint -e $GIT_PARAMS"
- 配置
commitlint.config.js
// commitlint.config.js -> commitlint的配置
module.exports = {
"extends": [
"@commitlint/config-conventional"
],
"rules": {
"header-max-length": [
2,
"always",
120
]
}
}
其他
针对githooks其实可以实现很多功能,比如CI/CD,可以实现自动打包发布