vue3+ts:约定式提交(git husky + gitHooks)

本文详细记录了在Vue3和TypeScript项目中如何使用husky来设置Git钩子,特别是`commit-msg`钩子,以确保提交信息遵循特定的格式。通过安装和配置husky,以及编写`verify-commit-msg.js`脚本,可以强制执行commit信息的规则,如使用`feat`,`fix`等关键字,并提供错误提示。此外,文章还提到了在配置过程中遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

Git - githooks Documentation

https://github.com/typicode/husky#readme

gitHooks: commit-msg_snow@li的博客-CSDN博客

之前实践过这个配置,本文在vue3 + ts 的项目中,再记录一次。

二、使用

2.1、安装

2.1.1、安装husky

pnpm add husky

2.1.2、package.json

"scripts": {
    "prepare": "husky install",
}

 2.1.3、pnpm run prepare

pnpm run prepare

执行后:

2.2、初始化husky 

npx husky install .husky

执行后: 

2.3、package.json

"gitHooks": {
    "pre-commit": "lint-staged",
    "commit-msg": "node scripts/verify-commit-msg.js"
  }

2.4、安装chalk,vue3+ts使用4.X版本 

pnpm add chalk@4.1.2

2.5、/scripts/verify-commit-msg.js

import chalk from 'chalk'; // 控制台日志标注样式
import fs from 'fs';
const msgPath = process.env.GIT_PARAMS || '.git/COMMIT_EDITMSG' // 读取到保存 git commit 时输入的描述信息的文件目录,一般路径如下:.git/COMMIT_EDITMSG
const msg = fs.readFileSync(msgPath, 'utf-8').trim()

const commitRE =
  /^(revert: )?(wip|release|feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/

if (!commitRE.test(msg)) {
  console.log()
  console.error(
    `  ${chalk.bgRed.white(' ERROR ')} ${chalk.red(
      `invalid commit message format.`
    )}\n\n` +
      chalk.red(
        `  Proper commit message format is required for automated changelog generation. Examples:\n\n`
      ) +
      `    ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
      `    ${chalk.green(
        `fix(v-model): handle events on blur (close #28)`
      )}\n\n` +
      chalk.red(`  See .github/COMMIT_CONVENTION.md for more details.\n`)
  )
  process.exit(1)
}

2.6、添加一个commit msg钩子

npx husky add .husky/commit-msg "node scripts/verify-commit-msg.js"

2.7、测试提交

不规范示例:

规范示例:

经测试提交成功。

过程记录:

记录一、

 ReferenceError require is not defined in ES module scope, you can use import instead_绘绘~的博客-CSDN博客

记录二、

const msgPath = process.env.GIT_PARAMS

const msgPath = process.env.GIT_PARAMS || '.git/COMMIT_EDITMSG'

GIT_PARAMS没有读到目录,本文使用静态目录,待后续研究。

记录三、

引入chalk、fs需要使用import,使用require报错

记录四、 git 钩子

Git - githooks Documentation

参考链接:

Git钩子 GitHook - 简书

husky的使用 - 简书

VUE 3.0 源码 scripts/verifyCommit.js 文件 对git提交时输入的描述信息进行规范_git_params_老罗-laoluo的博客-CSDN博客

ReferenceError require is not defined in ES module scope, you can use import instead_绘绘~的博客-CSDN博客

Vue3项目工程化配置:Prettier + Eslint + husky + commitlint - 点击领取

vite vue3 规范化与Git Hooks详解_vue.js_脚本之家

https://www.cnblogs.com/heyhaiyang/p/15256588.html

前端工程规范化-eslint、stylelint、prettier、git hooks_51CTO博客_前端模块化规范

【Vue3】标准化大厂编程规范解决方案之ESLint + Git Hooks_51CTO博客_vue3 生产

Git commit 消息的格式与约定式提交_哔哩哔哩_bilibili

vite vue3 规范化与Git Hooks

Vue3 + Vite 前端工程化-基础篇 - 知乎

### 1. 配置 Husky 的背景 Husky 是一种用于 Git Hooks 的工具,它可以帮助开发者在执行某些 Git 命令之前运行脚本。通过 Husky,可以在提交代码前自动触发 ESLint 或 Prettier 等工具来校验代码质量[^1]。 --- ### 2. 安装依赖 为了实现基于 Vite、Vue3 和 TypeScript 的项目中的 Husky 配置,首先需要安装必要的依赖包: #### 安装 Husky ```bash npm install husky --save-dev ``` #### 初始化 Husky 初始化 Husky 并启用 Git Hooks 功能: ```bash npx husky-init && npm install ``` 这一步会在 `.husky` 文件夹下创建默认的 `pre-commit` Hook 脚本文件,并将其添加到项目的根目录中[^3]。 #### 可选:安装 Lint-Staged 如果希望仅针对即将被提交的文件运行校验,则可以安装 `lint-staged` 工具: ```bash npm install lint-staged --save-dev ``` --- ### 3. 配置 Husky Hooks 编辑 `.husky/pre-commit` 文件以指定钩子的行为。例如,在提交前运行 ESLint 校验命令: ```bash #!/bin/sh . "$(dirname "$0")/_/husky.sh" # 运行 eslint 对暂存区文件进行校验 npx lint-staged ``` 上述脚本将在每次执行 `git commit` 命令时调用 `lint-staged` 来处理暂存区域内的文件。 --- ### 4. 配置 Lint-Staged 在 `package.json` 中新增或修改 `lint-staged` 配置项,以便定义具体的校验逻辑。以下是常见的配置示例: ```json { "lint-staged": { "*.{ts,tsx,vue}": [ "eslint --fix", "prettier --write" ], "*.css": ["stylelint --fix"], "*.{png,jpg,gif,svg}": ["imagemin"] } } ``` 此配置表示对于扩展名为 `.ts`, `.tsx`, `.vue` 的文件将依次运行 ESLint 自动修复和 Prettier 格化;而对于 CSS 文件则应用 Stylelint。 --- ### 5. 添加 Commit Message 规范支持 (可选) 可以通过集成 **CommitLint** 和 **CZ CLI** 实现更严格的提交消息管理。 #### 安装 CommitLint ```bash npm install @commitlint/{cli,config-conventional} --save-dev ``` #### 创建 CommitLint 配置文件 新建 `.commitlintrc.js` 文件并写入如下内容: ```javascript module.exports = { extends: [&#39;@commitlint/config-conventional&#39;] }; ``` #### 安装 CZ CLI ```bash npm install cz-customizable --save-dev ``` 更新 `package.json` 的 scripts 字段,增加交互提交功能: ```json "scripts": { "prepare-commit-msg": "exec < /dev/tty && node_modules/.bin/cz --hook || true" }, "config": { "commitizen": { "path": "./node_modules/cz-customizable" } } ``` 最后设置 `husky` 使用该脚本来拦截标准输入框模下的提交操作: ```bash npx husky add .husky/commit-msg &#39;npx --no-install commitlint --edit $1&#39; ``` --- ### 总结 完成以上步骤后,您的 Vite + Vue3 + TypeScript 项目即可具备强大的代码质量和版本控制能力。每一次提交都会经过严格检验,从而减少潜在错误的发生概率[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值