在我们前端团队的日常开发中,随着项目规模扩大和团队成员增加,逐渐暴露出一些痛点:代码风格不统一、ESLint错误被提交到远程仓库、commit信息杂乱难以追溯变更历史。特别是在多人协作时,这些问题的负面影响被放大,导致代码审查效率低下和维护成本增加。
经过技术调研,我们决定采用基于Git钩子的自动化工作流,核心工具包括:
首先安装必要依赖:
npm install --save-dev husky lint-staged @commitlint/cli @commitlint/config-conventional prettier
启用Git钩子:
npx husky install
在package.json中添加prepare脚本:
{
"scripts": {
"prepare": "husky install"
}
}
创建pre-commit钩子来检查代码质量:
npx husky add .husky/pre-commit "npx lint-staged"
配置lint-staged(在package.json中):
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{css,scss,less}": [
"prettier --write"
],
"*.{json,md}": [
"prettier --write"
]
}
}
设置commit-msg钩子:
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
创建commitlint配置文件(commitlint.config.js):
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
[
'feat', // 新功能
'fix', // 修复bug
'docs', // 文档更新
'style', // 代码格式调整
'refactor', // 代码重构
'test', // 测试相关
'chore', // 构建过程或辅助工具变动
'perf' // 性能优化
]
],
'subject-case': [0] // 不限制subject大小写
}
};
通过lint-staged,我们只对Git暂存区中的文件进行检查和格式化,避免了每次提交都对整个项目进行linting,显著提升了执行效率。
配置ESLint和Prettier并行执行,并启用缓存:
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix --cache",
"prettier --write --cache"
]
}
}
对于TypeScript项目,配置增量编译以提高类型检查效率:
{
"scripts": {
"type-check": "tsc --incremental --noEmit"
}
}
有时开发者只需要提交部分修改,但钩子会对整个文件进行检查。我们通过git add -p允许开发者选择性地暂存修改,而不是整个文件。
在极少数需要绕过钩子的情况下(如WIP提交),我们提供了绕过方案:
git commit -m "wip: work in progress" --no-verify
但要求团队谨慎使用,并在完成后进行完整的代码检查。
为了避免IDE格式化与Prettier规则冲突,我们创建了编辑器配置文件:
// .vscode/settings.json
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
实施CodeBuddy工作流后,我们观察到:
通过CodeBuddy实现的自动化工作流不仅提升了代码质量,还改变了团队的开发习惯。未来我们计划:
这套方案的成功实施证明了自动化工具在提升开发效率和代码质量方面的重要价值,值得在中大型前端项目中推广使用。
关键配置文件已分享在团队知识库,欢迎交流改进建议。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。