Vue项目Git提交流程集成

Vue项目Git提交流程集成

本教程将指导你如何在Vue项目中集成一个规范化的Git提交流程,包括代码规范检查、提交信息规范和自动化工具配置。

前置条件

  • Node.js 14.0+ 和 npm/yarn/pnpm
  • Vue项目(Vue 2或Vue 3均可)
  • Git已初始化的仓库

一、规范化提交流程概述

一个完整的Git提交流程通常包含以下环节:

  1. 代码规范检查:使用ESLint和Prettier确保代码风格一致
  2. 提交前检查:使用husky和lint-staged在提交前执行检查
  3. 提交信息规范:使用commitlint和commitizen规范提交信息
  4. 自动生成变更日志:使用conventional-changelog生成CHANGELOG

这样的流程可以帮助团队保持一致的代码风格和提交历史,提高协作效率。

二、安装必要依赖

首先,我们需要安装一系列开发依赖:

bash 复制代码
# 使用npm
npm install --save-dev eslint prettier @vue/eslint-config-prettier husky lint-staged @commitlint/cli @commitlint/config-conventional commitizen cz-conventional-changelog conventional-changelog-cli

# 或使用yarn
yarn add --dev eslint prettier @vue/eslint-config-prettier husky lint-staged @commitlint/cli @commitlint/config-conventional commitizen cz-conventional-changelog conventional-changelog-cli

# 或使用pnpm
pnpm add --save-dev eslint prettier @vue/eslint-config-prettier husky lint-staged @commitlint/cli @commitlint/config-conventional commitizen cz-conventional-changelog conventional-changelog-cli

三、配置EditorConfig

在项目根目录创建.editorconfig文件,确保在不同编辑器中保持一致的编码风格:

ini 复制代码
# .editorconfig
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

四、配置ESLint和Prettier

4.1 ESLint配置

如果你的Vue项目还没有ESLint配置,在项目根目录创建.eslintrc.js文件:

javascript 复制代码
// .eslintrc.js
module.exports = {
  root: true,
  env: {
    node: true,
    browser: true,
  },
  extends: [
    'plugin:vue/vue3-recommended', // 或 'plugin:vue/recommended' 用于Vue 2
    'eslint:recommended',
    '@vue/prettier',
  ],
  parserOptions: {
    ecmaVersion: 2020,
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
  },
};

4.2 Prettier配置

创建.prettierrc文件:

json 复制代码
{
  "semi": true,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "es5",
  "printWidth": 100,
  "bracketSpacing": true,
  "arrowParens": "avoid"
}

同时创建.prettierignore忽略某些文件:

复制代码
/dist
/node_modules

五、配置Husky

Husky用于设置Git hooks,在关键Git操作前执行脚本。

5.1 初始化Husky

bash 复制代码
npx husky install

package.json中添加一个脚本,确保其他开发者在安装依赖后自动启用husky:

json 复制代码
{
  "scripts": {
    "prepare": "husky install"
  }
}

5.2 添加pre-commit钩子

bash 复制代码
npx husky add .husky/pre-commit "npx lint-staged"

5.3 添加commit-msg钩子

bash 复制代码
npx husky add .husky/commit-msg "npx --no -- commitlint --edit $1"

六、配置lint-staged

package.json中添加lint-staged配置:

json 复制代码
{
  "lint-staged": {
    "*.{js,vue,ts,jsx,tsx}": [
      "eslint --fix",
      "prettier --write"
    ],
    "*.{css,scss,less,styl}": [
      "prettier --write"
    ],
    "*.{json,md}": [
      "prettier --write"
    ]
  }
}

或者创建单独的.lintstagedrc.js文件:

javascript 复制代码
// .lintstagedrc.js
module.exports = {
  '*.{js,vue,ts,jsx,tsx}': [
    'eslint --fix',
    'prettier --write',
  ],
  '*.{css,scss,less,styl}': [
    'prettier --write',
  ],
  '*.{json,md}': [
    'prettier --write',
  ],
};

七、配置commitlint

创建commitlint.config.js文件:

javascript 复制代码
// commitlint.config.js
module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat',     // 新功能
        'fix',      // 修复Bug
        'docs',     // 文档变更
        'style',    // 代码格式(不影响代码运行的变动)
        'refactor', // 重构(既不是新增功能,也不是修改bug的代码变动)
        'perf',     // 性能优化
        'test',     // 增加测试
        'chore',    // 构建过程或辅助工具的变动
        'revert',   // 回滚到上一个版本
        'build',    // 打包
        'ci',       // CI相关变更
      ],
    ],
    'type-case': [2, 'always', 'lower'],
    'type-empty': [2, 'never'],
    'subject-empty': [2, 'never'],
    'subject-full-stop': [2, 'never', '.'],
    'header-max-length': [2, 'always', 72],
  },
};

八、配置commitizen

Commitizen可以帮助开发者创建符合约定的提交信息。

8.1 配置commitizen适配器

package.json中添加:

json 复制代码
{
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  }
}

8.2 添加提交脚本

package.json中添加:

json 复制代码
{
  "scripts": {
    "commit": "cz"
  }
}

这样开发者可以使用npm run commit(或yarn commitpnpm commit)来代替git commit进行提交。

九、配置conventional-changelog

用于自动生成变更日志。

package.json中添加脚本:

json 复制代码
{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
    "changelog:init": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
  }
}

十、完整工作流演示

下面是一个典型的开发和提交流程:

  1. 编写代码:开发新功能或修复bug

  2. 暂存更改git add .

  3. 规范提交:npm run commit(而不是git commit

    • 选择提交类型(feat、fix等)
    • 输入影响范围(可选)
    • 输入简短描述
    • 输入详细描述(可选)
    • 输入是否有破坏性变更(可选)
    • 输入是否修复了某个issue(可选)
  4. 推送代码git push

  5. 版本发布前npm run changelog生成新版本的变更日志

常见问题与解决方案

Husky钩子不生效

确保husky正确安装并且文件有执行权限:

bash 复制代码
chmod +x .husky/pre-commit
chmod +x .husky/commit-msg

ESLint报错太多无法提交

可以先使用--fix选项批量修复:

bash 复制代码
npx eslint --fix src/

想临时跳过检查直接提交

可以使用--no-verify参数:

bash 复制代码
git commit -m "紧急修复" --no-verify

但请注意,这应该只用于特殊情况。

自定义commit类型

修改commitlint.config.js中的type-enum规则,添加你需要的类型。

中文commit信息支持

默认配置支持中文提交信息,无需额外配置。


通过遵循本教程,你可以在Vue项目中建立一套完整的Git提交工作流,提高团队协作效率和代码质量。这套流程既适用于个人项目,也适用于团队协作。

相关推荐
几度泥的菜花44 分钟前
Vue 项目中长按保存图片功能实现指南
前端·javascript·vue.js
学习机器不会机器学习1 小时前
什么是跨域,如何解决跨域问题
前端·后端
Code哈哈笑1 小时前
【图书管理系统】详细讲解用户登录:后端代码实现及讲解、前端代码讲解
前端·spring boot·后端·spring·状态模式
前端小崔1 小时前
从零开始学习three.js(14):一文详解three.js中的粒子系统Points
开发语言·前端·javascript·学习·3d·webgl·数据可视化
阿里小阿希1 小时前
掌握 Git 常用命令,高效管理项目版本
git
程序猿阿伟2 小时前
《让内容“活”起来:Flutter社交应用瀑布流布局的破界实践》
前端·flutter
LuckyLay2 小时前
AI教你学VUE——Gemini版
前端·vue·学习路线·学习资源
朱颜辞镜花辞树‎2 小时前
Go Web 后台管理系统项目详解
开发语言·前端·golang
极小狐2 小时前
如何使用极狐GitLab 软件包仓库功能托管 npm?
java·前端·数据库·ci/cd·npm·gitlab·devops
小妖6662 小时前
uni-app 引入vconsole web端正常,安卓端报错 Cannot read property ‘sendBeacon‘ of undefined
android·前端·uni-app